Easynetq-从RabbitMQ读取多条消息

时间:2019-04-03 22:27:45

标签: c# rabbitmq easynetq

我有一个包含3个服务的解决方案,有2个队列将消息从一个服务传递到另一个服务,并且它使用EasyNetQ C#库连接到RabbitMQ。

这是架构的轮廓:

  1. 从网络TCP接收数据(进行一些处理) 队列A
  2. 队列A 中读取(进行一些处理)推送到队列B
  3. 队列B 读取,将处理后的数据发送到第三方API

服务1和2是旧服务,而最近引入了3。

事情是1和2一次处理一个日志,因此发布/订阅模式很有意义,即服务1收到一条消息并将该消息推送到队列A 进行进一步处理,但是服务3 应该向第三方API发送尽可能多的消息,因为该API可以在单个HTTP POST请求中最多接受1000条消息。

例如,我想引入一个计时器,每隔X分钟,计时器将触发一个事件,以从队列中读取多达1000条消息并将其通过HTTP发送给第三方API,但我似乎找不到一种方法来从队列中手动读取N条消息。

此刻,我像这样将消息从服​​务2发布到队列B:

_bus.Publish(myObject);

然后在第三项服务中我有一个订阅

_bus.SubscribeAsync<XQueueDTO>("x_queue_processor", ProcessMessageAsync);

但是此订阅将始终一次从队列中读取一条消息。

那么,解决这个问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

您可以更改BasicQos设置以允许使用者阅读1000条消息。如果这不能解决问题,则可以一一阅读消息,当计数达到1000时,可以触发服务3的逻辑。

编辑#1 enter image description here

参考:https://www.rabbitmq.com/tutorials/tutorial-two-dotnet.html