MassTransit 消耗队列中的所有消息

MassTransit consume all messages from the queue

我使用 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}");
                    });
                });
            });

在一项工作中,我需要从队列中检索所有消息,然后使用该列表来处理它们。 我有一个在队列中发布消息的网关,然后我有一个从队列接收消息并处理它们的作业。

这通常不是消息传递的工作方式。使用 MassTransit,您可以单独传送消息,以便以原子方式使用每条消息。或者您可以使用 batch consumer 一次传送多条消息。

认为您可以从队列中“获取所有消息”并不是人们应该思考的方式,队列中实际上可能有数百万条消息。而且您绝对不会将多个 SubmitOrder 样式的消息作为批处理。在架构上,这只是一个非常糟糕的主意。