首页 > 解决方案 > 根据消息属性从 Amazon SQS 向 SQL 数据库发送消息

问题描述

我的任务用例:现在用例是我在表单中填写名字、姓氏等详细信息,然后单击提交按钮,数据直接进入Amazon SQS,然后有一个定义的侦听器包含一个按钮,然后在该按钮上单击数据从侦听器到 MSSQL 数据库。

场景(当前):现在正在发送甚至属于不同消息属性的所有消息。

要求:我想发送属于特定消息属性的特定消息。例如:假设A类,B类和C类是三个不同的消息属性,A类包含一个消息,B类包含两个消息,C类包含四个消息,我想要的只是B类属性的消息应该是发送,不属于 A 类和 C 类。

我想知道是否可以根据消息属性从 Amazon SQS 仅将选定/特定消息发送到 SQL 数据库?

任何帮助将不胜感激。提前致谢。

标签: asp.netamazon-web-servicesamazon-sqs

解决方案


SQS 消息不能根据消息属性有选择地传递。标准做法是每类消费者都有自己的队列,这样就不需要过滤,因为假设给定队列的所有消费者都能够处理队列中的所有消息。

如果您确实需要一个公共的消息源以使其输出按消息属性过滤,那么建议的解决方案是将消息发布到 SNS 主题,然后根据 SNS 支持的消息属性过滤器订阅队列到该主题。例如,此配置将允许队列 1 捕获类型 A、B 和 C 的消息,同时允许队列 2 捕获类型 C、D 和 E 的消息。请注意类型 C 的重叠。此类消息在此配置中,将被传递到两个队列。

请参阅使用 Amazon SNS 过滤消息发送扇出事件通知

SNS 主题和 SQS 队列可以进行多对多映射,其中多个队列以任何所需的配置订阅多个主题。

请注意,当 SQS 队列订阅 SNS 主题时,默认行为是仅将有效负载发送到队列。要接收整个 SNS 包装器,包括 SNS 消息属性,请在每个订阅上启用“原始消息传递”。

那么,如果不是为了服务端过滤,这留下了一个问题,即 SQS 消息属性的目的必须是什么。它们可以是有利于接收方的元数据,提供有关有效负载的信息而无需实际反序列化有效负载,或者它们可以提供有关有效负载传输编码的信息,例如有效负载是否具有 gzip 压缩和 base64发送方应用的编码,消费者需要知道它才能解压有效负载。


推荐阅读