使用RabbitMQ,是否有一种方法可以将消息从队列"推送"到消费者,而不是让消费者从队列中"轮询和拉取"消息?
这一直是我正在进行的当前项目辩论的原因.一方面的论点是,让消费者(即Windows服务)"轮询"队列直到新消息到达,这比将消息从队列"自动"推送到订户的想法有些低效且不太理想. /消费者(一个或多个).
我似乎只能找到支持消费者从队列中"轮询和拉出"消息的想法的信息(例如,使用Windows服务来轮询队列中的新消息).关于向消费者/订户"推送"消息的想法没有太多信息......
让服务器将消息推送到客户端是向客户端发送消息的两种方法之一,也是大多数应用程序的首选方式.这称为通过订阅消费消息.
客户端已连接.(AMQP/RabbitMQ /大多数消息传递系统模型是客户端始终连接 - 当然除了网络中断之外.)
您可以使用客户端API通过提供回调方法来安排您的频道使用消息.然后,只要有消息可用,服务器就会通过通道将其发送到客户端,客户端应用程序通过异步回调(通常每个通道一个线程)获取它.您可以在通道上设置"预取计数",以控制客户端可以通过该通道执行的流水线操作.(为了进一步并行化,应用程序可以在一个连接上运行多个通道,这是一种用于各种目的的常见设计.)
另一种方法是客户端通过get方法一次一个地通过通道轮询消息.
小智 -2
RabbitMQ 代理就像服务器一样,如果消费者客户端未将自身注册到服务器,则不会向消费者发送数据。但问题如下
RabbitMQ 可以保留客户端消费者详细信息并在数据包到来时连接到客户端吗?
答案是否定的。那么有什么选择呢,那就自己编写插件,在某种配置中维护客户端信息。插件将从 RabbitMQ 队列中拉取并推送到客户端。
请看看这个插件可能会有所帮助。
https://www.rabbitmq.com/shovel.html
坦率地说,客户端需要实现 AMQP 协议来接收,并且应该侦听某个端口上的连接。这听起来像是另一台服务器。
问候,
维沙尔