![](/img/trans.png)
[英]rabbitmq.conf consumer_timeout not working in docker
[英]Rabbitmq consumer_timeout behavior not working as expected?
我很难证明consumer_timeout
设置按预期工作。 我可能做错了事情或误解了 consumer_timeout 行为。
我所有的测试代码都可以在这里找到: https://github.com/Rafarel/rabbitmq-tests
基本上,我将consumer_timeout
设置为 10000 毫秒(10 秒),然后在尝试确认消息之前尝试使用比超时值(20 秒)休眠时间稍长的回调来使用消息。
由于超时,我应该有一个 PRECONDITION_FAILED 异常,但事实并非如此。 如果我在receive_timeout.py
中将SLEEP_DURATION
设置为超过consumer_timeout
值(如 60 秒),我会遇到异常。
引自https://www.rabbitmq.com/consumers.html#acknowledgement-timeout
如果消费者在超过超时值(默认为 30 分钟)的时间内未确认其交付,则其通道将关闭并出现 PRECONDITION_FAILED 通道异常。
如果有人可以帮助我理解我做错了什么,那就太好了,谢谢!
一些有用的提示:
您可以在RabbitMQ服务器上运行以下命令动态设置consumer_timeout
值:
rabbitmqctl eval 'application:set_env(rabbit, consumer_timeout, 36000000).'
这会将新超时设置为 10 小时(36000000 毫秒)。 为了使它生效,你需要重新启动你的工人。 现有的工作连接将继续使用旧的超时。
您还可以检查当前配置的超时值:
rabbitmqctl eval 'application:get_env(rabbit, consumer_timeout).'
If you are running RabbitMQ via Docker image, here's how to set the value: Simply add -e RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS="-rabbit consumer_timeout 36000000"
to your docker run
OR set the environment RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS
to "-rabbit consumer_timeout 36000000"
.
对于未来的读者:
consumer_timeout 从来都不是为了提供任何精度,它主要是为了保护仲裁队列和非常长时间运行的消费者
默认情况下,超时只会每 60 秒评估一次。 此间隔由 channel_tick_interval 设置控制(已编辑)
所以尝试降低滴答间隔以获得更高的精度。
您的代码也阻止了 IO: https://github.com/Rafarel/rabbitmq-tests/issues/1
还
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.