我很难证明consumer_timeout
设置正在按预期工作。
我可能做错了或者误解了consumer_timeout行为。
我所有的测试代码都可以在这里找到:https://github.com/Rafarel/rabbitmq-tests
基本上,我有一个consumer_timeout
设置为 10000 毫秒(10 秒),然后我尝试通过回调来消耗该消息
在尝试确认消息之前,它会休眠比超时值(20 秒)长一点的时间。
由于超时,我应该有一个 PRECONDITION_FAILED 异常,但事实并非如此。
如果我设置了例外情况SLEEP_DURATION
in receive_timeout.py
远多于consumer_timeout
值如 60 秒。
引用自https://www.rabbitmq.com/consumers.html#acknowledgement-timeout
如果消费者在超过超时值(默认为 30 分钟)的时间内没有确认其交付,则其通道将被关闭,并出现 PRECONDITION_FAILED 通道异常。
如果有人可以帮助我理解我做错了什么,那就太好了,谢谢!
一些有用的提示:
- 动态配置
您可以动态设置consumer_timeout
通过在 RabbitMQ 服务器上运行以下命令来获取值:
rabbitmqctl eval 'application:set_env(rabbit, consumer_timeout, 36000000).'
这会将新超时设置为 10 小时(36000000 毫秒)。为了使其生效,您需要重新启动您的工作人员。现有的工作连接将继续使用旧的超时。
您还可以检查当前配置的超时值:
rabbitmqctl eval 'application:get_env(rabbit, consumer_timeout).'
- 使用 Docker 镜像
如果您通过 Docker 映像运行 RabbitMQ,则设置该值的方法如下:只需添加-e RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS="-rabbit consumer_timeout 36000000"
给你的docker run
或者设置环境RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS
to "-rabbit consumer_timeout 36000000"
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)