2014-07-21 78 views
2

我使用的彈簧rabbit1.1和RabbitMQ的3.3.1創建死信隊列,春天RabbitTemplate不與TTL

我的spring配置將創建任何隊列RabbitTemplate對兔MQ的幫助,但如果隊列已經配置了x-dead-letter-exchange和x-message-ttl,它只是創建了無TTL和死信交換的隊列。

例如:下面的隊列將創建隊列,但TTL和死信字符串未被創建。

<rabbit:queue name="hello.queue.dead"> 
    <rabbit:queue-arguments> 
     <entry key="x-dead-letter-exchange" value="hello.activity-task.topic"/> 
     <entry key="x-message-ttl" value="10000"/> 
    </rabbit:queue-arguments> 
</rabbit:queue> 

所以我不得不去和刪除兔MQ隊列中,並與所有手動所需的值來創建,使其工作。

任何人都可以幫助我,如果有任何選項來解決這個問題???

回答

4

你必須明確地聲明隊列和交流......

<rabbit:queue name="q.with.dlx"> 
    <rabbit:queue-arguments> 
     <entry key="x-dead-letter-exchange" value="dlx"/> 
     <entry key="x-message-ttl" value="10000" value-type="java.lang.Long"/> 
    </rabbit:queue-arguments> 
</rabbit:queue> 

<rabbit:queue name="dlq"/> 

<rabbit:direct-exchange name="dlx"> 
    <rabbit:bindings> 
     <rabbit:binding key="q.with.dlx" queue="dlq"/> 
    </rabbit:bindings> 
</rabbit:direct-exchange> 

這裏假設你使用(由隊列名稱路由)默認的直接交換路由的原始郵件。因此死信路由使用相同的路由密鑰(隊列名稱)。如果使用明確的路由密鑰進行路由,則可以使用該路由密鑰。

順便說一下,RabbitTemplate沒有聲明這些元素,它是RabbitAdmin實例。

+0

嗨加里, 感謝您的及時響應。我想添加完整的XML配置,我想知道春天如何可以幫助我在兔子MQ上使用TTL和DLX創建隊列。 – BSrinivas

+0

我已經有了與你建議的相同的配置,但是隊列只是創建出沒有任何參數。 – BSrinivas

+0

雖然我知道它會起作用,但在回答之前,我測試了上述配置。它只是工作。你必須有一些錯誤的配置。我建議你使用DEBUG日誌和RabbitMQ管理UI的組合來找出問題所在。 –