有没有办法在 RabbitMQ 中显式地将队列绑定到默认交换?

Is there way to bind queue to default exchange explicitly in RabbitMQ?

我犯了一个错误:现在两个队列都明确绑定到某个交换器,我可以为每个队列编辑它。其中一个队列必须绑定到默认交换。现在,当我尝试将该队列的交换更改为空字符串时,它会引发异常:

Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=403, reply-text=ACCESS_REFUSED - operation not permitted on the default exchange, class-id=<..>, method-id=<..>)

我可以将一些特定值传递给方法 com.rabbitmq.client.Channel#queueBind 以将队列绑定到 defaultChange 吗? 我使用 Java RabbitMQ 客户端库 5.6.0

首先,我们需要了解什么是默认交换;

来自RabbitMQ Docs

The default exchange is a direct exchange with no name (empty string) pre-declared by the broker. It has one special property that makes it very useful for simple applications: every queue that is created is automatically bound to it with a routing key which is the same as the queue name.

所以基本上,换句话说,如果您创建一个没有显式交换绑定的队列,该队列将有一个使用默认交换创建的自动绑定。

在您的问题中,根据您的描述,您似乎有两个队列(比如说 A 和 B)并且您不小心将这两个队列绑定到一个交换器(比如说 test.exchange)。你应该做的不是改变 "default.exchange",而是用你的交换 test.exchange[= 移除队列 A 或 B 的 binding 26=]。

请查看rabbitMQ Api Guides上的“/api/bindings”相关api,或者您也可以直接登录rabbit管理控制台并解除绑定。