我使用spring-rabbit1.1和RabbitMQ 3.3.1,
我的spring配置将在Rabbit MQ上的RabbitTemplate的帮助下创建任何队列,但是如果队列已经配置了x-死信交换和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>
因此,我必须从Rabbit MQ中删除队列,并手动创建所有必需的值以使其工作。
有没有人可以帮我解决这个问题?您必须显式声明队列和交换…
<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
实例。