我有一个包含3个服务的解决方案,有2个队列将消息从一个服务传递到另一个服务,并且它使用EasyNetQ C#库连接到RabbitMQ。
这是架构的轮廓:
服务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);
但是此订阅将始终一次从队列中读取一条消息。
那么,解决这个问题的最佳方法是什么?
答案 0 :(得分:1)
您可以更改BasicQos
设置以允许使用者阅读1000条消息。如果这不能解决问题,则可以一一阅读消息,当计数达到1000时,可以触发服务3的逻辑。
参考:https://www.rabbitmq.com/tutorials/tutorial-two-dotnet.html