2015-02-06 70 views
0

我有一個RabbitMQ服務器,它有大約100個隊列,每個隊列中都有大約100條消息。所有的隊列都有相同的交換和個人路由密鑰。 我正在使用Spring的amqp框架與RabbitMQ服務器進行交互。我有多個應用程序使用相同的RabbitMQ服務器(即多個消費者)。RabbitMQ獲取未確認郵件

我面臨的問題是,儘管接收到 消息,但對於某些特定的消費者來說,確認失敗,即我可以在某些隊列中看到一些未確認的消息。現在,如果我的應用程序偶然接收到一個重複的消息(即以前收到的消息),它會拋出異常,這就是我開始爲這些未消息消息獲取的東西。

但我甚至不確定何時以及爲什麼我會得到一個沒有消息(即重複)的消息,因爲我不確定未消息消息的優先級。那麼,你們能否給出解決方案以解決以下問題:

  1. 甚至在正確地獲取消息之後爲什麼有時只有確認不成功。
  2. 即使沒有第一個問題的解決方案1我應該如何配置我的應用程序,以便它永遠不會收到一個沒有包含(重複)的消息。

    順便說一句,從應用程序的創建 開始就沒有看到這種行爲,它最近開始以這種方式行事。

回答

0

在下面請看:

  1. Semaphore queue兔實現。 (可選地,您可以使用zookeeper或etcd來實現此目的)
  2. 當您收到消息時,它有一個標記redelivered當消息已被其他消費者使用時設置,但由於某種原因返回隊列。所以你可以簡單地檢查一下,如果它被設置,然後放下消息。