Amazon SQS,是否可以根据发件人ID从SQS获取邮件

Qaz*_*azi 5 amazon-sqs amazon-web-services

我们有多个亚马逊用户,它们正在将消息发送到相同的SQS队列中,那么是否可以在发件人ID的基础上从队列中获取消息?表示根据发件人ID返回特定邮件列表.

E.J*_*nan 7

不,你不能在senderid上过滤你的消息获取请求,你需要阅读所有消息并"扔出"(返回)那些不匹配的消息,但这不是最好的方法来解决它 - 您将支付所有这些读取请求并丢弃大量消息(即将它们返回队列).

虽然所有"错误"的消费者都在这样做,但实际上想要/需要分配给他们的消息的消费者将被阻止实际获得他们自己的消息 - 可能在很长一段时间内.

不确定你的意图,但听起来你最好使用多个队列,每个senderid一个,如果这是你想要消息的方式 - 创建额外的队列没有额外的成本.


Nav*_*jay 3

我假设过滤操作完成后需要处理队列项[实体]。虽然多个队列肯定会有所帮助,但更可靠的方法是执行预处理,然后在我看来是一种优雅的方式(例如按发件人 ID 进行过滤)。

随着AWS Lambda的发布,您当然可以卸载过滤或预处理,然后将其推送/放置在适当的位置。

如果您的用户将项目推送到队列,请尝试以下方法。

您可以尝试使用 2 个 Lambda 函数 [Feeder 和 Worker]。

Feeder的工作是scheduled lambda function从 SQS 获取项目(如果有)并将其作为 SNS 主题推送(并永远继续这样做)

工作人员将被链接来侦听 SNS 主题,该主题将执行data filtering[取决于发件人 ID]。通过的项目可以移动到一个全新的队列,其余的可以废弃。

更好的方法是让用户将实体直接推送到 SNS 主题,并且 lambda 函数可以直接执行过滤。