Spring-amqp 两个不同TTL的队列

Spring-amqp two queues with different TTL

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

[pool-4-thread-1] ERROR org.springframework.amqp.rabbit.connection.CachingConnectionFactory - Channel shutdown: channel error; protocol method: #method(reply-code=406, reply-text=PRECONDITION_FAILED - inequivalent arg 'x-message-ttl' for queue 'queue1' in vhost '/': received '60000' but current is '100000', class-id=50, method-id=10)

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

[http-nio-8080-exec-8] ERROR [P181786EJG755SN8I3S74584216UV1] No reply received - perhaps a timeout in the template? org.springframework.remoting.RemoteProxyFailureException: No reply received - perhaps a timeout in the template? at org.springframework.amqp.remoting.client.AmqpClientInterceptor.invoke(AmqpClientInterceptor.java:60) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) at com.sun.proxy.$Proxy83.getUserById(Unknown Source)

网上搜索结果如下:

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。

我找到了问题,它与错误的配置有关。 因此,要解决此问题:

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

Dmitrii Semenov 回复正确,仅供参考:

“尝试从 rabbitmq-management 中删除队列”

注意:从 docker 您可以访问“您的 ip 或本地主机”:15672

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

我遇到了同样的问题,但配置是正确的。 只需从 rabbit 管理中删除队列,然后让 spring 在微服务启动时重新创建,现在一切正常。