Spring-amqp 两个具有不同TTL的队列

Dmi*_*nov 4 rabbitmq spring-amqp

在我们的应用程序中,我们使用 RabbitMQ 和 spring-amqp(1.4.3.RELEASE)。我们那里有两个队列。它们都配置了 TTL(60000 和 100000)。当我们启动应用程序时,它会出现以下错误:

[pool-4-thread-1] 错误 org.springframework.amqp.rabbit.connection.CachingConnectionFactory - 通道关闭:通道错误;协议方法:#method(reply-code=406,reply-text=PRECONDITION_FAILED - vhost '/'中队列'queue1'的不等价参数'x-message-ttl':收到'60000'但当前为'100000',类-id=50,方法id=10)

然后当我们尝试向队列发送消息时会抛出异常:

[http-nio-8080-exec-8]错误[P181786EJG755SN8I3S74584216UV1]没有收到回复 - 可能是模板超时?org.springframework.remoting.RemoteProxyFailureException:未收到回复 - 可能是模板超时?在 org.springframework.amqp.remoting.client.AmqpClientInterceptor.invoke(AmqpClientInterceptor.java:60) 在 org.springframework.aop.framework.ReflectiveMethodInvocau.proceed(ReflectiveMethodInitation.java:179) 在 org.springframework.aop.framework.JdkDynamicAopProxy .invoke(JdkDynamicAopProxy.java:207) 在 com.sun.proxy.$Proxy83.getUserById(来源未知)

在网上搜索得到的结果如下:

http://forum.spring.io/forum/spring-projects/integration/amqp/124865-unexpected-behaviour-with-rabbit-admin 特别是这个错误: https: //jira.spring.io/browse/AMQP -266

发现该错误后,我们将两个队列的 TTL 值更改为 60000,并且不再显示错误。并且应用程序运行良好。所以,看来TTL还是有一个bug。

Dmi*_*nov 5

我发现了这个问题,它与错误的配置有关。因此,要解决此问题:

  1. 检查 Rabbit-Server 中声明的队列在 spring-configurations 中是否具有相同的参数。好事是从兔子中完全删除队列并启动应用程序。
  2. 在应用程序中,可能有多个地方可以声明队列。检查它们是否都具有相同的参数。如果它们有不同的参数,可能会导致问题(这就是我的情况)。