根据http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features-managing-env-tiers.html:
If the application returns any response other than 200 OK, then Elastic
Beanstalk waits to put the message back in the queue after the configured
VisibilityTimeout period.
我已将VisibilityTimeout设置为1分钟。我的应用程序在处理请求时返回400错误。我从日志中看到请求每2秒重新尝试一次!基于上述情况,我期待它每60秒重试一次。
我错过了什么?
答案 0 :(得分:2)
这可能根本不是SQS队列的问题。确实,只有在指定的 VisibilityTimeout 之后,消息才会返回到队列,但这取决于您如何轮询消息。
如果你没有直接访问队列(但是使用某种服务为你做这件事),你就会有另一层复杂性。
Elastic Beanstalk中有一个名为sqsd
的工作进程正在进行轮询,(处理消息并在用200响应后将其从队列中删除)。
sqsd
使用类似的概念,称为 InactivityTimeout - 这指定了此工作程序等待200响应的时间,如果未传递此响应,则会在此时间后重新发送消息。
我的猜测是问题的原因在于此InactivtyTimeout。
如果这不是原因,请尝试查看SQS的WaitTimeSeconds
参数。这指定如果队列中有消息,则应立即返回对SQS的调用(否则,它将等待指定的时间)。
我遇到了与EC2实例类似的问题,并且我指定了所有超时。最后 - 它转变它是由Tomcat中的一个错误引起的 - 请参阅:https://forums.aws.amazon.com/thread.jspa?threadID=183473