我使用的是spring-rabbit1.1和RabbitMQ 3.3.1,
我的spring配置将在Rabbit MQ的RabbitTemplate的帮助下创建任何队列,但如果队列配置了x-dead-letter-exchange和x-message-ttl,它只会创建没有TTL的队列,死信交换。
对于Eg:以下队列将创建队列但是没有创建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>
所以我必须从Rabbit MQ中删除队列并手动创建所有必需的值以使其工作。
如果有任何选择可以解决这个问题,任何人都可以帮助我吗?
答案 0 :(得分:5)
您必须明确声明队列并交换......
<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
个实例。