Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring RabbitTemplate未使用TTL创建死信队列_Spring_Rabbitmq_Amqp_Spring Amqp_Spring Rabbit - Fatal编程技术网

Spring RabbitTemplate未使用TTL创建死信队列

Spring RabbitTemplate未使用TTL创建死信队列,spring,rabbitmq,amqp,spring-amqp,spring-rabbit,Spring,Rabbitmq,Amqp,Spring Amqp,Spring Rabbit,我使用的是spring-rabbit1.1和RabbitMQ 3.3.1 我的spring配置将在RabbitMQ上的RabbitTemplate的帮助下创建任何队列,但如果该队列已配置了x-dead-letter-exchange和x-message-ttl,它只会创建不包含ttl和dead-letter exchange的队列 例如:下面的队列将创建队列,但不会创建TTL和死信呼气 <rabbit:queue name="hello.queue.dead"> <ra

我使用的是spring-rabbit1.1和RabbitMQ 3.3.1

我的spring配置将在RabbitMQ上的RabbitTemplate的帮助下创建任何队列,但如果该队列已配置了x-dead-letter-exchange和x-message-ttl,它只会创建不包含ttl和dead-letter exchange的队列

例如:下面的队列将创建队列,但不会创建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>

因此,我必须从RabbitMQ中删除队列,并手动创建所有必需的值以使其工作


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

您必须显式声明队列和交换

<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>

这假定您使用默认的直接交换(按队列名称路由)路由原始邮件。因此,死信路由使用相同的路由密钥(队列名称)。如果您使用显式路由密钥进行路由,则会使用该密钥


顺便说一句,
rabbitmplate
没有声明这些元素,它是
RabbitAdmin
实例。

你好,Gary,感谢您的及时回复。我想添加完整的xml配置,我想知道spring如何帮助我在rabbit MQ上使用TTL和DLX创建队列。我已经有了与您建议的相同的配置,但队列只是在没有任何参数的情况下创建的。虽然我知道它可以工作,但我在回答之前测试了上面的配置。它只是工作。你一定有什么配置错误。我建议您结合使用调试日志和RabbitMQ管理UI来找出问题所在。嗨,Gary,您能再次帮助我吗?我使用了您的配置,它创建了exchange,但没有创建队列。您认为我遗漏了什么,您可以共享的任何示例或链接都可以帮助我从rabbit mq上的spring动态创建exchange和队列。另一件事是,如果队列已经存在于rabbit mq上,它会通过向队列添加ttl来更改队列吗?我使用了您可以在上面看到的确切配置,以及
RabbitAdmin
bean(当然还有连接工厂)。我建议您打开调试日志记录;
RabbitAdmin
在声明时发出调试日志。否,
RabbitMQ
拒绝更改队列参数的尝试;必须删除并重新添加队列。