2

我正在使用 spring-rabbit1.1 和 RabbitMQ 3.3.1 ,

我的 spring 配置将在 Rabbit MQ 上的 RabbitTemplate 的帮助下创建任何队列,但是如果队列已经配置了 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>

所以我不得不去从 Rabbit MQ 中删除队列并手动创建所有必需的值以使其工作。

如果有任何选项可以解决此问题,谁能帮助我???

4

1 回答 1

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实例。

于 2014-07-21T12:58:16.837 回答