环境:
Rabbitmq3.9.13
RabbitTemplate
发送消息报错
Caused by: java.io.IOException
at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:129) ~[amqp-client-5.13.1.jar:5.13.1]
at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:125) ~[amqp-client-5.13.1.jar:5.13.1]
at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:147) ~[amqp-client-5.13.1.jar:5.13.1]
at com.rabbitmq.client.impl.ChannelN.queueDeclare(ChannelN.java:968) ~[amqp-client-5.13.1.jar:5.13.1]
at com.rabbitmq.client.impl.ChannelN.queueDeclare(ChannelN.java:46) ~[amqp-client-5.13.1.jar:5.13.1]
at org.springframework.amqp.rabbit.connection.PublisherCallbackChannelImpl.queueDeclare(PublisherCallbackChannelImpl.java:351) ~[spring-rabbit-2.4.3.jar:2.4.3]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_202]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_202]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_202]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_202]
at org.springframework.amqp.rabbit.connection.CachingConnectionFactory$CachedChannelInvocationHandler.invoke(CachingConnectionFactory.java:1157) ~[spring-rabbit-2.4.3.jar:2.4.3]
at com.sun.proxy.$Proxy477.queueDeclare(Unknown Source) ~[?:?]
at org.springframework.amqp.rabbit.core.RabbitAdmin.declareQueues(RabbitAdmin.java:822) ~[spring-rabbit-2.4.3.jar:2.4.3]
at org.springframework.amqp.rabbit.core.RabbitAdmin.lambda$initialize$12(RabbitAdmin.java:693) ~[spring-rabbit-2.4.3.jar:2.4.3]
at org.springframework.amqp.rabbit.core.RabbitTemplate.invokeAction(RabbitTemplate.java:2237) ~[spring-rabbit-2.4.3.jar:2.4.3]
at org.springframework.amqp.rabbit.core.RabbitTemplate.doExecute(RabbitTemplate.java:2196) ~[spring-rabbit-2.4.3.jar:2.4.3]
... 107 more
Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - inequivalent arg 'x-message-ttl' for queue 'order.ten-second.real.queue.name' in vhost '/': received none but current is the value '10000' of type 'signedint', class-id=50, method-id=10)
at com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:66) ~[amqp-client-5.13.1.jar:5.13.1]
at com.rabbitmq.utility.BlockingValueOrException.uninterruptibleGetValue(BlockingValueOrException.java:36) ~[amqp-client-5.13.1.jar:5.13.1]
at com.rabbitmq.client.impl.AMQChannel$BlockingRpcContinuation.getReply(AMQChannel.java:502) ~[amqp-client-5.13.1.jar:5.13.1]
at com.rabbitmq.client.impl.AMQChannel.privateRpc(AMQChannel.java:293) ~[amqp-client-5.13.1.jar:5.13.1]
at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:141) ~[amqp-client-5.13.1.jar:5.13.1]
at com.rabbitmq.client.impl.ChannelN.queueDeclare(ChannelN.java:968) ~[amqp-client-5.13.1.jar:5.13.1]
at com.rabbitmq.client.impl.ChannelN.queueDeclare(ChannelN.java:46) ~[amqp-client-5.13.1.jar:5.13.1]
at org.springframework.amqp.rabbit.connection.PublisherCallbackChannelImpl.queueDeclare(PublisherCallbackChannelImpl.java:351) ~[spring-rabbit-2.4.3.jar:2.4.3]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_202]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_202]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_202]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_202]
at org.springframework.amqp.rabbit.connection.CachingConnectionFactory$CachedChannelInvocationHandler.invoke(CachingConnectionFactory.java:1157) ~[spring-rabbit-2.4.3.jar:2.4.3]
at com.sun.proxy.$Proxy477.queueDeclare(Unknown Source) ~[?:?]
at org.springframework.amqp.rabbit.core.RabbitAdmin.declareQueues(RabbitAdmin.java:822) ~[spring-rabbit-2.4.3.jar:2.4.3]
at org.springframework.amqp.rabbit.core.RabbitAdmin.lambda$initialize$12(RabbitAdmin.java:693) ~[spring-rabbit-2.4.3.jar:2.4.3]
at org.springframework.amqp.rabbit.core.RabbitTemplate.invokeAction(RabbitTemplate.java:2237) ~[spring-rabbit-2.4.3.jar:2.4.3]
at org.springframework.amqp.rabbit.core.RabbitTemplate.doExecute(RabbitTemplate.java:2196) ~[spring-rabbit-2.4.3.jar:2.4.3]
... 107 more
Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - inequivalent arg 'x-message-ttl' for queue 'order.ten-second.real.queue.name' in vhost '/': received none but current is the value '10000' of type 'signedint', class-id=50, method-id=10)
at com.rabbitmq.client.impl.ChannelN.asyncShutdown(ChannelN.java:517) ~[amqp-client-5.13.1.jar:5.13.1]
at com.rabbitmq.client.impl.ChannelN.processAsync(ChannelN.java:341) ~[amqp-client-5.13.1.jar:5.13.1]
at com.rabbitmq.client.impl.AMQChannel.handleCompleteInboundCommand(AMQChannel.java:182) ~[amqp-client-5.13.1.jar:5.13.1]
at com.rabbitmq.client.impl.AMQChannel.handleFrame(AMQChannel.java:114) ~[amqp-client-5.13.1.jar:5.13.1]
at com.rabbitmq.client.impl.AMQConnection.readFrame(AMQConnection.java:739) ~[amqp-client-5.13.1.jar:5.13.1]
at com.rabbitmq.client.impl.AMQConnection.access$300(AMQConnection.java:47) ~[amqp-client-5.13.1.jar:5.13.1]
at com.rabbitmq.client.impl.AMQConnection$MainLoo
开始一直以为是服务器连接失败导致的IO异常
- 排查RabbitMQ控制台
connections
和channels
连接正常 - 排查控制台
Exchanges
和Queues
详情,binding属性无任何信息 - 排查Queue绑定信息,两个重复queue绑定到不同的exchange导致绑定失败,但是启动无任何报错(NMD)
- 修改queue后重启项目,一分钟左右查看MQ控制台仍然不存在绑定信息,过一段时间后发送消息正常
结论:
RabbitMQ实在很傻,存在一些问题
- 监听重复队列启动过程不报错
- 修改queue重启后绑定关系存在延迟