当前位置: 首页 > 知识库问答 >
问题:

RabbitMQ能够将消息从队列“推送给”消费者吗?

郜俊晤
2023-03-14

使用RabbitMQ,有没有一种方法可以将消息从队列“推送”给使用者,而不是让使用者从队列“轮询并拉出”消息

这也是我目前正在进行的一个项目引起一些争论的原因。一个方面的论点是,让使用者(即windows服务)“轮询”队列直到新消息到达,与将消息从队列自动“推送”到订户/使用者的想法相比,这种想法有些低效,也不太理想。

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

共有1个答案

赫连黎昕
2023-03-14

让服务器向客户机推送消息是向客户机获取消息的两种方法之一,也是大多数应用程序的首选方法。这称为通过订阅使用消息。

客户端已连接。(AMQP/RabbitMQ/MOST消息传递系统模型是客户端始终处于连接状态--当然,网络中断除外。)

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

 类似资料:
  • 在队列选项卡的rabbitMQ web界面上,我看到了“概述”面板,我在其中找到了以下内容: 排队消息: 准备好了 未确认 总数 我猜“总数”是多少。但什么是“准备就绪”和“未确认”?“准备好了”——传递给消费者的信息?“未确认”-? 消息费率: 发表 交付 重新交付 承认 这些信息是什么?尤其是“重新交付”和“确认”?这是什么意思?

  • 我运行生产者,它生成N条消息,我在仪表板上看到它们。当我运行接收器时,它会接收来自队列的所有消息,并且队列为空。 我需要有多个生产者生成消息到同一个队列。多个客户从队列中接收消息。消息将被队列TTL删除。但是现在第一个接收者从队列中获取所有消息。我怎么能做到这一点?

  • 我有以下场景:有3个rabbitmq队列,生产者根据消息的优先级将消息推送到这些队列。(myqueue_high,myqueue_medium,myqueue_low)我希望有一个可以按顺序或优先级从这些队列中提取的单一使用者,即只要消息在那里,它就一直从高队列中提取。它是从介质中拉出来的。如果medium也是空的,它从Low拉出。 我如何实现这一点?我需要编写自定义组件吗?

  • 已使用生产者推送消息。它向主题推送了100000条消息。 使用命令:bin/kafka producer perf test。sh--代理列表localhost:9092--消息100000--主题perfAtlasTopic获取以下生产者指标。 开始时间,结束。时间、压缩、消息。大小,批次。大小,总计。数据发送。在里面MB,MB。秒,总计。数据发送。在里面nMsg,nMsg。第[2015-02-

  • 我有一个向rabbitmq发送消息的服务,消费者对消息进行一些操作并重新排队。 我可以成功地将初始消息发送给rabbitmq,但问题是,如果消息需要修改,我无法将任何已使用的消息重新发送给rabbitmq。 我试图用new创建一个新类,但“MyService”始终为空

  • 我有一个生产者和一个消费者。消费者的多个实例正在运行。当生产者发布消息时,我的意图是通过所有实例消费该消息。所以,我使用的是直接交换。生产者将带有主题的消息发布到直接交换。消费者正在通过独占队列收听该主题。当消费者启动并且生产者发布消息时,此过程运行良好。但是当消费者关闭并且生产者发布消息时,消费者在启动时不会消费此消息。 我在谷歌上搜索了这个问题。建议使用命名队列。但是,如果使用命名队列,则消息