2016-09-17 71 views
0

我有一個從RabbitMQ接收消息的應用程序。消息一旦被使用並遇到某些問題。我已將setDefaultRequeueRejected設置爲true,並且它正在重新排隊。在Spring AMQP中只讀取消息的可數次

現在我有情景,如果消息回到隊列,它將被消耗並再次重新排隊。這形成了一種循環。

現在我需要消耗重新排隊的消息只有兩次(維護類型的計數器),然後我將它推到ErrorQueue/DeadLetter隊列。 如何保持這樣的計數器?

問候,

CHANDAN

回答

0

的RabbitMQ不提供這樣的機制,只是一個布爾標頭,指示該消息被重新傳遞。

如果發件人設置了messageId標頭,則可以使用stateful retry interceptor with,並且框架將跟蹤同一郵件已發送的次數。使用RejectAndDontRequeueRecoverer時,消息將在重試耗盡後發送到DLQ(如果已配置)。

如果您沒有消息ID,則可以使用自定義MessageKeyGenerator從消息本身爲狀態生成密鑰。

+0

謝謝加里。我對'MessageKeyGenerator'更感興趣。您能否給我提供一些示例實現/示例。這對我有很大的幫助:) – Chandan

+0

它是一個簡單的接口'Object getKey(Message message)'你獲得對消息的引用並返回一個唯一標識消息的值(比如來自頭部或者消息體)。如果沒有生成器,我們使用'messageId'屬性 - 它應該由發送者設置,並且是唯一的。該消息是原始的,在任何轉換之前。 –

+0

我還是沒有弄清楚。你可以請我重定向到一些示例實現? – Chandan