Rabbitmq consumer_timeout行为未按预期工作?

ibrsph3r  于 2022-11-08  发布在  RabbitMQ
关注(0)|答案(2)|浏览(315)

我很难证明consumer_timeout设置是否按预期工作。我可能做错了事情或误解了consumer_timeout行为。
我所有的测试代码都可以在这里找到:https://github.com/Rafarel/rabbitmq-tests
基本上,我将consumer_timeout设置为10000 ms(10秒),然后在尝试确认消息之前,尝试使用一个休眠时间比超时值(20秒)长一点的回调来使用消息。
我应该有一个PRECONDITION_FAILED异常,因为超时,但事实并非如此。我有异常,如果我设置SLEEP_DURATIONreceive_timeout.py的方式超过consumer_timeout的值,如60秒。
引用自https://www.rabbitmq.com/consumers.html#acknowledgement-timeout
如果使用方在超过超时值(默认为30分钟)的时间内未确认其传递,则其通道将关闭,并出现PRECONDITION_FAILED通道异常。
如果有人能帮助我了解我做错了什么,那就太好了,谢谢!

q35jwt9p

q35jwt9p1#

对于未来的读者:
consumer_timeout从未打算提供任何类型的精度,它主要用于保护仲裁队列和长时间运行的使用者
默认情况下,超时仅每60秒计算一次。此间隔由channel_tick_interval设置(已编辑)控制
因此请尝试降低滴答间隔以获得更高的精度。
此外,您的代码正在阻塞IO:https://github.com/Rafarel/rabbitmq-tests/issues/1
也可以

55ooxyrt

55ooxyrt2#

一些有用的提示:
1.动态配置
您可以通过在RabbitMQ服务器上运行以下命令来动态设置consumer_timeout值:
rabbitmqctl eval 'application:set_env(rabbit, consumer_timeout, 36000000).'
这会将新的超时设置为10小时(36000000毫秒)。要使此设置生效,您需要重新启动工作进程。现有的工作进程连接将继续使用旧的超时。
您还可以检查当前配置的超时值:
rabbitmqctl eval 'application:get_env(rabbit, consumer_timeout).'
1.使用Docker图像
如果您正在通过Docker映像运行RabbitMQ,下面是如何设置该值:只需将-e RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS="-rabbit consumer_timeout 36000000"添加到您的docker run,或者将环境RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS设置为"-rabbit consumer_timeout 36000000"

相关问题