MassTransit 使用队列中的所有消息
Posted
技术标签:
【中文标题】MassTransit 使用队列中的所有消息【英文标题】:MassTransit consume all messages from the queue 【发布时间】:2021-12-09 16:20:18 【问题描述】:我使用 Masstransit RabbitMQ。作为消费者,仅在事件在队列中发布时才消费事件。在上面的示例中,如何通过单个请求(使用)从队列中获取所有 SubmitOrder 列表?
var busControl = Bus.Factory.CreateUsingRabbitMq(cfg =>
cfg.ReceiveEndpoint("order-service", e =>
//here i want to get all SubmitOrder as list
e.Handler<SubmitOrder>(async context =>
await Console.Out.WriteLineAsync($"Submit Order Received: context.Message.OrderId");
);
);
);
在工作中,我需要从队列中检索所有消息,然后使用该列表来处理它们。 我有一个在队列中发布消息的网关,然后我有一个从队列接收消息并处理它们的作业。
【问题讨论】:
【参考方案1】:这通常不是消息传递的工作方式。使用 MassTransit,您可以单独传递消息,从而以原子方式使用每条消息。或者您可以使用batch consumer 一次发送多条消息。
认为您可以从队列中“获取所有消息”是不应该的,因为队列中可能有数百万条消息。而且您绝对不会将多个SubmitOrder
样式消息作为一个批次处理。从架构上讲,这只是一个非常糟糕的主意。
【讨论】:
我完全同意你的看法。由于存在队列结构,因此不建议从中弹出所有数据。批量消费者正是我所需要的。谢谢以上是关于MassTransit 使用队列中的所有消息的主要内容,如果未能解决你的问题,请参考以下文章
在与 Entity Framework 的事务中通过 MassTransit 发送消息