【问题标题】:Is there way to bind queue to default exchange explicitly in RabbitMQ?有没有办法在 RabbitMQ 中显式地将队列绑定到默认交换?
【发布时间】:2020-09-14 21:55:40
【问题描述】:

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

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

【问题讨论】:

    标签: java rabbitmq messaging rabbitmq-exchange


    【解决方案1】:

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

    来自RabbitMQ Docs

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

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

    在您的问题中,根据您的描述,您似乎有两个队列(比如说 A 和 B),并且您不小心将两个队列绑定到了一个交换器(比如说 test.exchange)。与其对“default.exchange”进行更改,不如使用您的交换器test.exchange 删除队列 A 或 B 的 binding

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

    【讨论】:

    • 感谢您的回答,我不知道兔子管理控制台的强大功能。现在我们做了修补程序并重新部署了应用程序,所以问题就消失了。但是如果我遇到 rabbitMQ 的问题,我会记住控制台的可用性
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-30
    • 1970-01-01
    • 2014-03-07
    • 1970-01-01
    相关资源
    最近更新 更多