我正在關注以下教程: https://www.rabbitmq.com/tutorials/tutorial-two-java.html。我如何讓RabbitMQ重新傳遞未確認的消息?
我啓動的RabbitMQ服務器這樣的:
docker pull rabbitmq
docker run -d --hostname my-rabbit-host --name my-rabbit -p 5672:5672 rabbitmq:3
從教程:
使用此代碼,我們可以肯定的是,即使你殺了使用 同時CTRL + C工人正在處理一條消息,沒有東西會丟失。工作人員死後所有未確認的消息都會重新發送,很快 。
我產卵兩位消費者,當我CTRL + C其中之一,其他運行一個不不收到原本註定要前消費者的消息。如何在CTRL + C退出其中一個消費者後獲得消息重新發送?
編輯:我現在通過'brew'安裝RabbitMQ,但我仍然看到相同的問題。
brew update
brew install rabbitmq
/usr/local/sbin/rabbitmq-server &
從你所描述的來看,它應該是開箱即用的。你是不是在睡覺時用睡覺而不是「doWork」的東西來阻止消費者? (顯然,一旦消息是「basicAcked」,它將不會再次傳遞給任何消費者)。您確定其他消費者實際上在消費嗎? – user1527491
正確 - 我在睡覺之前就睡了一覺。我在睡眠期間按CTRL + C。我在消費者的handleDelivery()回調中打印消息,但它永遠不會通過。 – Phillip
如果您同時使用兩種消費者,他們平均收到消息還是收到消息始終是相同的?如果它始終是同一個消費者,那麼可能表示第二個消費者未正確配置(例如未正確綁定到隊列)。爲了更加自信,在隊列中放入一些消息並確保它們同時消耗。 此外,使用'rabbitmq:3-management'泊塢窗圖像(+轉發15672並打開它的瀏覽器,用戶名是'guest',密碼是'guest')來查找隊列中消息的實際發生情況。 – user1527491