是否可以使用auto-ack = false禁用預取?每次我確認一條消息時,我只想避免從隊列中讀取消息(預取)。我只想在我調用'consume_message'時讀取消息。設置prefetch_count = 0似乎不起作用,並將其視爲「無限制」。RabbitMq:使用auto-ack = false禁用預取(prefetch_count = 0)
已更新:
據我所知'prefetch_count'是客戶端緩存的消息數(本地讀入緩衝區)。例如,有一個用例:
(假設有我們連接到一個隊列,它有消息)
- 創建連接。
- 設置Basic.Qos(prefetch_count = 1)
- 開始消耗Basic.Consume
- 由於prefetch_count = 1個一個消息是已經傳輸到客戶端和準備好被讀取並標記作爲未確認。
- 閱讀消息然後處理它。
- 然後消息是ack'd。一切從第4步開始。
我認爲設置prefetch_count爲0將避免步驟4,只有當你讀它的消息傳送 - 在客戶端沒有緩存。
Hm ...文檔中說[鏈接](https://www.rabbitmq.com/amqp-0-9-1-reference.html):'如果沒有應答選項,預取計數將被忽略已設定「。現在還不清楚 - 客戶端消費了多少條消息? – eSZet
我已經更新了我的問題,請看看 – eSZet
您提出的問題(auto-ack = false和prefetch_count = 1)恰恰就是我更新部分問題的用例。但關鍵是步驟4.我想避免這一點。將預取計數設置爲0不起作用 - 這意味着沒有指定計數。我希望這很清楚。 – eSZet