筛选来自 Amazon MQ 事件源的事件
您可以使用事件筛选,控制 Lambda 将流或队列中的哪些记录发送给函数。有关事件筛选工作原理的一般信息,请参阅 控制 Lambda 向您的函数发送的事件。
本节重点介绍 Amazon MQ 事件源的事件筛选。
Amazon MQ 事件筛选基础知识
假设 Amazon MQ 消息队列包含有效 JSON 格式或纯字符串的消息。示例记录如下所示,data
字段中的数据会转换为 Base64 编码字符串。
对于 Active MQ 和 Rabbit MQ 代理,您可以使用 data
键,通过事件筛选来筛选记录。假设 Amazon MQ 队列包含以下 JSON 格式的消息。
{ "timeout": 0, "IPAddress": "203.0.113.254" }
要仅筛选 timeout
字段大于 0 的记录,FilterCriteria
对象将如下所示。
{ "Filters": [ { "Pattern": "{ \"data\" : { \"timeout\" : [ { \"numeric\": [ \">\", 0] } } ] } }" } ] }
为了更清楚起见,以下是在纯 JSON 中展开的筛选条件 Pattern
的值。
{ "data": { "timeout": [ { "numeric": [ ">", 0 ] } ] } }
您可以使用控制台、AWS CLI 或 AWS SAM 模板添加筛选条件。
使用 Amazon MQ,您还可以筛选消息为纯字符串的记录。假设您只想处理消息以“结果:”开头的记录。FilterCriteria
对象将如下所示。
{ "Filters": [ { "Pattern": "{ \"data\" : [ { \"prefix\": \"Result: \" } ] }" } ] }
为了更清楚起见,以下是在纯 JSON 中展开的筛选条件 Pattern
的值。
{ "data": [ { "prefix": "Result: " } ] }
您可以使用控制台、AWS CLI 或 AWS SAM 模板添加筛选条件。
Amazon MQ 消息必须是 UTF-8 编码的字符串,可以是纯字符串或 JSON 格式。这是因为 Lambda 在应用筛选条件之前将 Amazon MQ 字节数组解码为 UTF-8。如果您的消息使用另一种编码,例如 UTF-16 或 ASCII,或者消息格式与 FilterCriteria
格式不匹配,则 Lambda 仅处理元数据筛选条件。下表汇总了具体行为:
传入消息格式 | 消息属性的筛选条件模式格式 | 导致的操作 |
---|---|---|
纯字符串 |
纯字符串 |
Lambda 根据您的筛选条件进行筛选。 |
纯字符串 |
数据属性中没有筛选条件模式 |
Lambda 根据您的筛选条件进行筛选(仅限其他元数据属性)。 |
纯字符串 |
有效 JSON |
Lambda 根据您的筛选条件进行筛选(仅限其他元数据属性)。 |
有效 JSON |
纯字符串 |
Lambda 根据您的筛选条件进行筛选(仅限其他元数据属性)。 |
有效 JSON |
数据属性中没有筛选条件模式 |
Lambda 根据您的筛选条件进行筛选(仅限其他元数据属性)。 |
有效 JSON |
有效 JSON |
Lambda 根据您的筛选条件进行筛选。 |
非 UTF-8 编码字符串 |
JSON、纯字符串或无模式 |
Lambda 根据您的筛选条件进行筛选(仅限其他元数据属性)。 |