【问题标题】:How Messages Are Delivered to Consumer in RabbitMQRabbitMQ 中消息如何传递给消费者
【发布时间】:2020-09-20 12:36:52
【问题描述】:

我目前正在开发一个使用 RabbitMQ 消息代理的应用程序。我对消息传递的工作方式感到困惑,并且我已经阅读了他们的官方文档,但无法澄清我的担忧。

假设我的应用程序可以从两个队列中获取消息,对于队列 A ,生产者直接将消息推送到该队列,而队列 B 通过交换获取消息。我的问题是,如果队列 A 和队列 B 同时向消费者发送消息,消费者将如何消费这些消息?顺序还是通过创建多个并行线程?。

如果我的主线程负责读取消息,那么让主线程进入睡眠状态是否会停止消费队列中的消息?我的意思是,只要主线程处于睡眠状态,rabbitMQ 就会停止向消费者推送消息吗?到目前为止,我没有使用消费者确认,并试图通过让主线程休眠一段所需的时间来查看是否可以停止消息消费。

【问题讨论】:

    标签: java rabbitmq


    【解决方案1】:

    RabbitMQ 消费者只能使用来自单个队列的消息。 RabbitMQ 消费者通过两种机制消费队列中的消息

    1. Push 机制 - 在这种类型中,rabbitmq-server 负责在队列中有消息时将消息推送给消费者。可以使用basic_qos 配置控制要发送给消费者的消息数量。消息可以自动确认,也可以由消费者确认。
    2. Pull 机制 - 在这种类型中,消费者的工作是为消息请求 rabbitmq-server。一次只能请求一条消息。

    当消费者使用push机制连接时,消费者会运行一个IO循环,所以当你运行一个长时间运行的作业时,长时间运行的作业有可能会阻碍消费者心跳到rabbitmq服务器。处理此问题的一种方法是在单独的线程上运行长时间运行的作业。

    【讨论】:

      猜你喜欢
      • 2015-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-20
      • 2016-05-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多