首页 文章

RabbitMQ是否能够将消息从队列“推送”到消费者身上?

提问于
浏览
10

使用RabbitMQ,是否有一种方法可以将消息从队列“推送”到消费者,而不是让消费者从队列中“轮询和拉取”消息?

这一直是我正在进行的当前项目辩论的原因 . 一方面的论点是,让消费者(即Windows服务)“轮询”队列直到新消息到达,这比将消息从队列“自动”推送到订户的想法有些低效且不太理想 . /消费者(一个或多个) .

我似乎只能找到支持消费者从队列中“轮询和拉动”消息的想法的信息(例如,使用Windows服务来轮询队列以获取新消息) . 关于向消费者/订户“推送”消息的想法没有太多信息......

4 回答

  • 0

    让服务器将消息推送到客户端是向客户端发送消息的两种方法之一,也是大多数应用程序的首选方式 . 这称为通过订阅消费消息 .

    客户端已连接 . (AMQP / RabbitMQ /大多数消息传递系统模型是客户端始终连接 - 当然除了网络中断之外 . )

    您可以使用客户端API通过提供回调方法来安排您的 Channels 使用消息 . 然后,只要有消息可用,服务器就会通过通道将其发送到客户端,客户端应用程序通过异步回调(通常每个通道一个线程)获取它 . 您可以在通道上设置“预取计数”,以控制客户端可以通过该通道执行的流水线操作 . (为了进一步并行化,应用程序可以在一个连接上运行多个通道,这是一种用于各种目的的常见设计 . )

    另一种方法是客户端通过get方法一次一个地通过通道轮询消息 .

  • 0

    有点迟到的答案......尽管如此,你还是从制作人到Exchange的消息.2523387_ . https://www.rabbitmq.com/tutorials/tutorial-three-python.html

    顺便说一句,这非常适合物联网场景 . 设备会生成消息并将其发送给exchnage . 队列正在处理持久性,FIFO和其他功能,就像向订阅者传递消息一样 .

    顺便说一下,你永远不会“轮询”队列 . 相反,您始终订阅发布者 . 与观察者模式类似 . 一般来说,我会说天才原则 . 所以它类似于邮箱或邮局,除了它在消息可用时向您发送通知 .

  • -4

    引用文档here

    AMQP经纪人或者向订阅队列的消费者传递消息,或者消费者根据需要从队列中获取/拉取消息 .

    here

    将消息存储在队列中是没用的,除非应用程序可以使用它们 . 在AMQP 0-9-1模型中,应用程序有两种方法可以执行此操作:将消息传递给它们(“推送API”)
    根据需要获取消息(“pull API”)
    使用“推送API”,应用程序必须表明有兴趣使用来自特定队列的消息 . 当他们这样做时,我们说他们注册了一个消费者,或者简单地说,他们订阅了一个队列 . 每个队列可以有多个消费者,或者注册一个独占消费者(在消费时排除队列中的所有其他消费者) . 每个消费者(订阅)都有一个称为消费者标签的标识符 . 它可用于取消订阅邮件 . 消费者标签只是字符串 .

  • 8

    RabbitMQ代理就像服务器一样,在没有消费者客户端将自己注册到服务器的情况下不会向消费者发送数据 . 但接下来问题如下

    RabbitMQ能否保留客户端消费者详细信息并在数据包到达时连接到客户端?

    答案是否定的 . 那么什么是替代,然后自己编写插件,在某种配置中维护客户端信息 . 插件将从RabbitMQ队列中拉出并推送到客户端 .

    请看看这个插件可能会有所帮助 .
    https://www.rabbitmq.com/shovel.html

    坦率地说,客户端需要实现AMQP协议才能接收,并且应该在某个端口上监听连接 . 这听起来像另一台服务器 .

    问候,
    维沙尔

相关问题