[英]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.