码上敲享录 > RabbitMQ面试题 > RabbitMQ向不存在的 exchange 发 publish 消息会发生什么?向不存在的 queue 执行consume 动作会发生什么?

RabbitMQ向不存在的 exchange 发 publish 消息会发生什么?向不存在的 queue 执行consume 动作会发生什么?

上一章章节目录下一章 2023-07-14已有258人阅读 评论(0)

当向一个不存在的交换器(exchange)发起 publish 消息时,RabbitMQ 的默认行为是直接丢弃该消息。这是因为交换器是消息路由的关键组件,如果找不到对应的交换器,消息就无法正确路由到队列。


当执行 consume 动作时,如果尝试从一个不存在的队列消费消息,RabbitMQ 行为将取决于消费者的配置。以下是可能的情况:


1. 如果消费者是使用 `basic.get` 方法(即直接拉取方式)从队列获取消息,且队列不存在,则会返回一个 `ChannelException`,指示队列不存在的错误。


2. 如果消费者通过 `basic.consume` 方法注册在一个不存在的队列上,RabbitMQ 默认会接受该注册,但不会给消费者分发任何消息。换句话说,消费者将一直等待队列中有消息到达,而实际上消息并不存在。


总结起来,向不存在的交换器发起消息发布操作,消息会被直接丢弃。向不存在的队列执行 consume 操作,消费者可能会收到相应的错误提示或者永远等待队列中的消息。因此,在使用 RabbitMQ 时,确保正确设置交换器和队列的配置以及消费者的动作非常重要,避免消息的意外丢失或等待。


0

有建议,请留言!

  • *您的姓名:

  • *所在城市:

  • *您的联系电话:

    *您的QQ:

  • 咨询问题:

  • 提 交