使用RabbitMQ,有没有一种方法可以将消息从队列“推送”到消费者,而不是让消费者“轮询并从队列中提取”消息?
这已经引起了一些关于我正在做的项目的争论。一方的论点是,让消费者(即,windows服务)在新消息到达之前“轮询”队列在某种程度上是低效的,并且比使消息从队列自动“推入”到订户/consumer(多个)的想法更不可取。
我似乎只能找到支持消费者“轮询并从队列中拉出”消息的想法的信息(例如,使用windows服务来轮询队列中的新消息)。关于“推送”消息给消费者/订阅者的想法没有太多的信息……
发布于 2015-07-23 15:34:37
让服务器将消息推送到客户端是将消息发送到客户端的两种方式之一,也是大多数应用程序的首选方式。这称为通过订阅消费消息。
客户端已连接。(AMQP/RabbitMQ/大多数消息传递系统模型是客户端始终处于连接状态-当然,网络中断除外。)
您可以使用客户端API通过提供回调方法来安排通道使用消息。然后,只要有消息可用,服务器就通过通道将其发送给客户端,客户端应用程序通过异步回调(通常是每个通道一个线程)获取该消息。您可以在通道上设置“预取计数”,以控制客户端可以在该通道上执行的流水线操作的数量。(为了进一步提高并行性,应用程序可以在一个连接上运行多个通道,这是一种用于各种目的的常见设计。)
另一种方法是客户端通过get方法通过通道一次轮询一条消息。
发布于 2018-01-24 09:31:39
您将消息从Producer“推”到Exchange。
https://www.rabbitmq.com/tutorials/tutorial-three-python.html
顺便说一句,这非常适合IoT场景。设备生成消息并将其发送到交换机。Queue正在处理持久化、FIFO和其他功能,以及向订阅者传递消息。
顺便说一句,你永远不会“轮询”队列。相反,您总是订阅publisher。类似于观察者模式。一般来说,我会说天才原则。因此,它类似于邮箱或邮局,除了它会在消息可用时向您发送通知。
发布于 2018-07-22 19:49:00
引用自docs here
AMQP代理要么将消息传递给订阅了队列的消费者,要么消费者按需从队列中获取/拉取消息。
来自here
将消息存储在队列中是无用的,除非应用程序可以使用它们。在AMQP 0-9-1模型中,应用程序有两种方法可以做到这一点:
让消息下发("push API")根据需要拉取消息("pull API")
使用“推送API",应用程序必须表明有兴趣使用特定队列中的消息。当他们这样做时,我们说他们注册了一个消费者,或者简单地说,订阅了一个队列。每个队列可以有多个消费者,也可以注册一个独占消费者(当队列正在消费时,将所有其他消费者排除在队列之外)。
每个消费者(订阅)都有一个称为消费者标签的标识符。它可以用来取消订阅消息。消费者标签只是字符串。
https://stackoverflow.com/questions/26521854
复制相似问题