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

时间:2016-01-08 10:42:08

标签: amazon-web-services amazon-sqs

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

3 个答案:

答案 0 :(得分:7)

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

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

不确定你的意图,但听起来你最好使用多个队列,每个发送者一个,如果你想要消费这些消息 - 创建额外队列没有额外的成本。

答案 1 :(得分:2)

我假设在过滤操作完成后需要处理队列项[实体]。虽然多个队列当然可以提供帮助,但是执行预处理的方式更加健壮,然后在我看来,像发送者ID过滤一样优雅。

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

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

你可以试试2个Lambda函数[Feeder&工人]。

  

Feedder 将是scheduled lambda function,他的工作是拿走物品   来自SQS(如果有的话)并将其作为SNS主题推送(并继续永久地完成)

     将链接

工作人员以侦听将执行data filtering [取决于发件人ID]的SNS主题。传递的项目可以移动到一个全新的队列,其余的可以报废。

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

答案 2 :(得分:0)

是的,那是可能的。 从message属性读取SenderId将为您提供发送者的ID。这将帮助您唯一地标识将消息放入队列中的用户。

您可以执行以下操作:

Message sqsMessage = <your_SQS_message>;
String senderId = sqsMessage.getAttributes().get("SenderId");

添加基于senderid的过滤器效率低下,但是您可以执行业务逻辑,在其中可以添加度量标准或基于senderId将任务委派给工作人员。