我有一个Elastic Beanstalk工作者,一次只能运行一个任务,这需要一些时间(从几分钟到希望不到30分钟),所以我在SQS上排队工作。
在我的工作人员configuration上,我有:
HTTP connections: 1 Visibility timeout: 3600 Error visibility timeout: 300 (On "Advanced") Inactivity timeout: 1800
问题是,似乎有一个1分钟的超时(在nginx?),覆盖“不活动超时”,返回504(网关超时)。
这是我可以在aws-sqsd.log文件中find的:
2016-02-03T16:16:27Z init: initializing aws-sqsd 2.0 (2015-02-18) 2016-02-03T16:16:27Z start: polling https://sqs.eu-central-1.amazonaws.com/855381918026/jitt-publisher-queue 2016-02-03T16:23:36Z message: sent to %[http://localhost:80] 2016-02-03T16:24:36Z http-err: 1444d1ba-ecb5-46f8-82d6-d0bf19b91fad (1) 504 - 60.006 2016-02-03T16:28:54Z message: sent to %[http://localhost:80] 2016-02-03T16:29:54Z http-err: 1b7514d3-689a-4e8b-a569-5ef1ac32ed0c (1) 504 - 60.029 2016-02-03T16:29:54Z message: sent to %[http://localhost:80] 2016-02-03T16:29:54Z http-err: 1444d1ba-ecb5-46f8-82d6-d0bf19b91fad (2) 500 - 0.006 2016-02-03T16:33:49Z message: sent to %[http://localhost:80] 2016-02-03T16:34:49Z http-err: 3a43e80f-a8d3-46b2-b2a0-9d898ad4f2a6 (1) 504 - 60.023 2016-02-03T16:34:54Z message: sent to %[http://localhost:80] 2016-02-03T16:34:54Z http-err: 1b7514d3-689a-4e8b-a569-5ef1ac32ed0c (2) 500 - 0.004 2016-02-03T16:34:54Z message: sent to %[http://localhost:80] 2016-02-03T16:34:54Z http-err: 1444d1ba-ecb5-46f8-82d6-d0bf19b91fad (3) 500 - 0.003 2016-02-03T16:39:49Z message: sent to %[http://localhost:80] 2016-02-03T16:40:49Z http-err: 3a43e80f-a8d3-46b2-b2a0-9d898ad4f2a6 (2) 504 - 60.019
有些事情是有道理的,比如每个消息从504/500时间开始直到任务重新发送给工作人员(匹配“错误可见性超时”的300秒configuration)的5分钟延迟。
这500个代码符合我目前的逻辑:如果还有一些东西在运行,工作人员通过丢回500来拒绝任务。
我已经看到很多关于设置Load Balancer连接超时设置的答案,但是,由于这是一个从SQS队列中拉取消息的工作者,因此没有Load Balancer。
任何想法,我应该做什么来覆盖1分钟超时设置?
由于我有时间调查这个好一点,解决方法是添加一个ebextension配置代理超时设置:
files: "/etc/nginx/sites-available/elasticbeanstalk-nginx-docker-proxy-timeout.conf": mode: "000644" owner: root group: root content: | proxy_connect_timeout 3600; proxy_send_timeout 3600; proxy_read_timeout 3600; send_timeout 3600; commands: "00nginx-create-proxy-timeout": command: "if [[ ! -h /etc/nginx/sites-enabled/elasticbeanstalk-nginx-docker-proxy-timeout.conf ]] ; then ln -s /etc/nginx/sites-available/elasticbeanstalk-nginx-docker-proxy-timeout.conf /etc/nginx/sites-enabled/elasticbeanstalk-nginx-docker-proxy-timeout.conf ; fi"
资料来源: http : //cloudavail.com/2015/10/18/allowing-long-idle-timeouts-when-using-aws-elasticbeanstalk-and-docker/