Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.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 订阅AWS SQS消息_Amazon Web Services_Amazon Sqs - Fatal编程技术网

Amazon web services 订阅AWS SQS消息

Amazon web services 订阅AWS SQS消息,amazon-web-services,amazon-sqs,Amazon Web Services,Amazon Sqs,我在AWS SQS队列中有大量消息。这些信息将被其他来源不断地推送到it。对于这些消息被推送到队列的频率没有适当的动态控制。目前,我保持每秒轮询SQS,并检查其中是否有可用的消息。有没有更好的方法来处理这个问题,比如从SQS或SNS接收一些消息可用的通知,这样我只在需要时请求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调用将按四个请求计费
在一台主机上,您可能每月花费不到10美元的时间,每秒24小时不间断地轮询消息


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