Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services AmazonSQS,是否可以根据发送者ID从SQS获取消息_Amazon Web Services_Amazon Sqs - Fatal编程技术网

Amazon web services AmazonSQS,是否可以根据发送者ID从SQS获取消息

Amazon web services AmazonSQS,是否可以根据发送者ID从SQS获取消息,amazon-web-services,amazon-sqs,Amazon Web Services,Amazon Sqs,我们有多个Amazon用户,他们将消息发送到同一个SQS队列中,所以可以根据发送者ID从队列中获取消息吗?表示根据发件人ID返回特定的邮件列表。否,您无法筛选发件人ID上的邮件获取请求,您需要读取所有邮件并“丢弃”(返回)不匹配的邮件,但这并不是最好的解决方法——你将为所有这些读取请求付费,并抛出大量消息(即将它们返回队列) 虽然所有“错误”的消费者都在这样做,但实际上想要/需要分配给他们的消息的消费者将被阻止获得他们自己的消息——可能会持续很长时间 不确定您的意图,但听起来您最好使用多个队列,

我们有多个Amazon用户,他们将消息发送到同一个SQS队列中,所以可以根据发送者ID从队列中获取消息吗?表示根据发件人ID返回特定的邮件列表。

否,您无法筛选发件人ID上的邮件获取请求,您需要读取所有邮件并“丢弃”(返回)不匹配的邮件,但这并不是最好的解决方法——你将为所有这些读取请求付费,并抛出大量消息(即将它们返回队列)

虽然所有“错误”的消费者都在这样做,但实际上想要/需要分配给他们的消息的消费者将被阻止获得他们自己的消息——可能会持续很长时间


不确定您的意图,但听起来您最好使用多个队列,每个senderid一个,如果您希望这样使用消息-创建额外队列没有额外成本。

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

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

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

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

进料器将是
预定lambda函数
,其任务是接收项目 来自SQS(如果有)并将其作为SNS主题推送(并且永远继续这样做)

工作者将被链接以收听SNS主题,该主题将执行
数据过滤
[取决于发件人ID]。通过的项目可以移动到一个全新的队列,其余的可以报废

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

是的,这是可能的。 从message属性中读取SenderId将为您提供发件人的id。这将帮助您唯一地识别将消息放入队列的用户

您可以这样做:

Message sqsMessage = <your_SQS_message>;
String senderId = sqsMessage.getAttributes().get("SenderId");
消息sqsMessage=;
字符串senderId=sqsMessage.getAttributes().get(“senderId”);
基于senderid添加筛选器效率低下,但您可以执行业务逻辑,在该逻辑中,您可以添加度量或基于senderid将任务委托给工作人员