Spring RabbitTemplate没有创建带有TTL的死信队列



我使用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实例。

最新更新