Spring RabbitTemplate没有使用TTL创建死信队列

时间:2014-07-21 06:29:18

标签: spring rabbitmq amqp spring-amqp spring-rabbit

我使用的是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中删除队列并手动创建所有必需的值以使其工作。

如果有任何选择可以解决这个问题,任何人都可以帮助我吗?

1 个答案:

答案 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个实例。