当队列存在时 RabbitMQ 抛出绑定错误

RabbitMQ throw binding error when queue exist

如果队列存在且自动删除为假,则每当我们重新启动 RabbitMQ 时都会抛出绑定错误 错误日志:

> 2021-10-25T17:59:58.438-0600 ERROR [rabbitmqWorkerImportantListenerContainer-7329] RMQSession - RabbitMQ exception on queue declare name(Tasks), durable(true), exclusive(false), auto-delete(false), properties(null)
java.io.IOException: null
    at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:129)
    at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:125)
    at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:147)
    at com.rabbitmq.client.impl.ChannelN.queueBind(ChannelN.java:1077)
    at com.rabbitmq.client.impl.recovery.AutorecoveringChannel.queueBind(AutorecoveringChannel.java:393)
    at com.rabbitmq.jms.client.RMQSession.declareRMQQueue(RMQSession.java:940)
    at com.rabbitmq.jms.client.RMQSession.createQueue(RMQSession.java:863)
    at jdk.internal.reflect.GeneratedMethodAccessor101.invoke(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=404, reply-text=NOT_FOUND - no binding Tasks between exchange 'jms.durable.queues' in vhost '/' and queue 'Tasks' in vhost '/', class-id=50, method-id=20)
    at com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:66)
    at com.rabbitmq.utility.BlockingValueOrException.uninterruptibleGetValue(BlockingValueOrException.java:36)
    at com.rabbitmq.client.impl.AMQChannel$BlockingRpcContinuation.getReply(AMQChannel.java:502)
    at com.rabbitmq.client.impl.AMQChannel.privateRpc(AMQChannel.java:293)
    at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:141)
    ... 18 common frames omitted

可能您之前创建的队列对 auto_ack、独占或持久等设置不同

  • 一种方法是删除 RabbitMQ web 上已经存在的队列-ui (http://localhost:15672/)

  • 或者您可以重新启动 RabbitMQ 服务器,从头开始创建和绑定队列。

  • 或者您可能会更改现有队列的设置。

我已经尝试了几个解决方案,但没有任何效果。然后我们尝试按照下面 GitHub link 中的说明删除交换,它起作用了。 https://github.com/rabbitmq/rabbitmq-server/issues/887