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

时间:2015-02-26 13:48:33

标签: rabbitmq spring-amqp

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

  

[pool-4-thread-1] ERROR org.springframework.amqp.rabbit.connection.CachingConnectionFactory - 频道关闭:频道错误;协议方法:#method(reply-code = 406,reply-text = PRECONDITION_FAILED - 不相等的arg' x-message-ttl'用于队列' queue1'在vhost' /& #39;:已收到' 60000'但当前是' 100000',class-id = 50,method-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.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.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仍然存在一个错误。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

Dmitrii Semenov的回答是正确的,仅供参考:

“尝试从Rabbitmq管理中删除队列”

注意:在docker中,您可以访问“您的IP或本地主机”:15672

enter image description here

enter image description here

参考: https://github.com/streadway/amqp/issues/60#issuecomment-18119437