Amazon web services 订阅AWS SQS消息
我在AWS SQS队列中有大量消息。这些信息将被其他来源不断地推送到it。对于这些消息被推送到队列的频率没有适当的动态控制。目前,我保持每秒轮询SQS,并检查其中是否有可用的消息。有没有更好的方法来处理这个问题,比如从SQS或SNS接收一些消息可用的通知,这样我只在需要时请求SQS,而不是持续轮询?你想要的方法是使用长轮询,而不是每秒不断轮询,您打开的请求在超时或消息进入队列之前一直保持打开状态。请查看以下文档: 一种常见的使用模式是让后台线程运行长轮询,并将结果推送到内部队列(例如或)中,供工作线程读取Amazon web services 订阅AWS SQS消息,amazon-web-services,amazon-sqs,Amazon Web Services,Amazon Sqs,我在AWS SQS队列中有大量消息。这些信息将被其他来源不断地推送到it。对于这些消息被推送到队列的频率没有适当的动态控制。目前,我保持每秒轮询SQS,并检查其中是否有可用的消息。有没有更好的方法来处理这个问题,比如从SQS或SNS接收一些消息可用的通知,这样我只在需要时请求SQS,而不是持续轮询?你想要的方法是使用长轮询,而不是每秒不断轮询,您打开的请求在超时或消息进入队列之前一直保持打开状态。请查看以下文档: 一种常见的使用模式是让后台线程运行长轮询,并将结果推送到内部队列(例如或)中,供工
注意:处理完结果后,不要忘了打电话,以免再次收到结果。您也可以使用AWS Elastic Beanstalk中的辅助功能。它允许您构建一个worker来处理每条消息,当您使用Elastic Beanstalk将其部署到EC2实例时,您可以将其定义为订阅了特定队列。然后,每条消息都将被发送到工作者,而无需从队列中调用接收消息 它使您的系统布线更加容易,因为您还可以使用自动缩放规则,允许您在峰值负载时生成多个工作线程来处理更多消息,并在负载较低时将其缩小到单个工作线程。如果您的工作人员回答“确定”,它也会自动删除消息
请在此处查看更多信息:您还可以查看该属性: 但老实说,我们在这里使用的是
delay:0
,价格便宜:
- 每月前100万个Amazon SQS请求是免费的
- 此后每月每100万亚马逊SQS请求0.50美元(每SQS请求0.00000050美元)
- 单个请求可以包含1到10条消息,最大总负载为256KB
- 有效负载的每个64KB“块”按1个请求计费。例如,具有256KB负载的单个API调用将按四个请求计费
Shoryuken的优点之一是它可以批量获取,因此与按消息获取解决方案相比,它节省了一些资金。感谢Chris为我指明了正确的方向。我将实现它。20是WaitTimeSeconds的最大值,但是,是的,这可能是最好的解决方案。它工作得很好。
ReceiveMessageRequest req = new ReceiveMessageRequest()
.withWaitTimeSeconds(Integer.valueOf(20)); // set long poll timeout to 20 sec
// set other properties on the request as well
ReceiveMessageResult result = amazonSQS.receiveMessage(req);
delay: 25 # The delay in seconds to pause a queue when it's empty