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

And*_*rey 2 java messaging rabbitmq rabbitmq-exchange

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

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

cod*_*kbd 5

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

来自RabbitMQ 文档

默认交换是经纪人预先声明的没有名称(空字符串)的直接交换。它有一个特殊的属性,这使得它对于简单的应用程序非常有用:创建的每个队列都会使用与队列名称相同的路由键自动绑定到它。

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

在你的问题中,从你的描述来看,你似乎有两个队列(比如说A和B),并且你不小心将这两个队列绑定到了一个交换器(比如说test.exchange)。您应该做的是删除队列 A 或 B 与交换test.exchange的绑定,而不是对“default.exchange”进行更改。

请检查rabbitMQ Api Guides上的“/api/bindings”相关api ,或者您也可以简单地登录到rabbit管理控制台并删除绑定。