Rap*_*oux 9 python timeout rabbitmq pika
我很难证明该consumer_timeout设置按预期工作。我可能做错了或者误解了consumer_timeout行为。
我所有的测试代码都可以在这里找到:https ://github.com/Rafarel/rabbitmq-tests
基本上,我将时间consumer_timeout设置为 10000 毫秒(10 秒),然后尝试通过回调来消耗该消息,该回调的睡眠时间比超时值(20 秒)长一点,然后再尝试确认该消息。
由于超时,我应该有一个 PRECONDITION_FAILED 异常,但事实并非如此。如果我设置的SLEEP_DURATION方式receive_timeout.py比consumer_timeout60 秒之类的值,
引用自https://www.rabbitmq.com/consumers.html#acknowledgement-timeout
如果消费者在超过超时值(默认为 30 分钟)的时间内没有确认其交付,则其通道将被关闭,并出现 PRECONDITION_FAILED 通道异常。
如果有人可以帮助我理解我做错了什么,那就太好了,谢谢!
Sar*_*ang 21
一些有用的提示:
您可以consumer_timeout通过在 RabbitMQ 服务器上运行以下命令来动态设置该值:
rabbitmqctl eval 'application:set_env(rabbit, consumer_timeout, 36000000).'
这会将新超时设置为 10 小时(36000000 毫秒)。为了使其生效,您需要重新启动您的工作人员。现有的工作连接将继续使用旧的超时。
您还可以检查当前配置的超时值:
rabbitmqctl eval 'application:get_env(rabbit, consumer_timeout).'
如果您通过 Docker 映像运行 RabbitMQ,则设置该值的方法如下:只需添加-e RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS="-rabbit consumer_timeout 36000000"到您的docker run或将环境设置RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS为"-rabbit consumer_timeout 36000000".
Gab*_*ele 10
对于未来的读者:
Consumer_timeout 从来都不是为了提供任何精度,它主要是为了保护仲裁队列和非常长时间运行的消费者
默认情况下,仅每 60 秒评估一次超时。该间隔由channel_tick_interval设置控制(已编辑)
因此,请尝试降低刻度间隔以获得更高的精度。
另外,您的代码会阻止 IO: https ://github.com/Rafarel/rabbitmq-tests/issues/1
还
| 归档时间: |
|
| 查看次数: |
11897 次 |
| 最近记录: |