.Net Core RabbitMQ/Masstransit 同一应用程序中每个可配置线程数一个消费者

.Net Core RabbitMQ/Masstransit one consumer per configurable number of threads in same app

我可以创建一个 workerservices 来创建和配置 n 个 RabbitMQ 消费者,每个消费者都有自己的线程用于应用内负载平衡。

我是 Masstransit 的新手,我不知道如何配置我想要的方式。我发现这段代码在配置服务中使用消息类型队列:

   // MassTransit-RabbitMQ Configuration
        services.AddMassTransit(config => {

            config.AddConsumer<BasketCheckoutConsumer>();

            config.UsingRabbitMq((ctx, cfg) => {
                cfg.Host(Configuration["EventBusSettings:HostAddress"]);
                cfg.UseHealthCheck(ctx);

                cfg.ReceiveEndpoint(EventBusConstants.BasketCheckoutQueue, c => {
                    c.ConfigureConsumer<BasketCheckoutConsumer>(ctx);
                });
            });
        });
        services.AddMassTransitHostedService();

        // General Configuration
        services.AddScoped<BasketCheckoutConsumer>();

问题是,如果我运行从0到n-1循环运行这一行services.AddScoped<BasketCheckoutConsumer>();

这个板条箱会容纳n个消费者吗?这是消费者从同一个队列中获取消息。

我的方向好吗?

MassTransit 中的消费者不会连续使用线程。消费者也在单个消息处理的范围内被实例化,所以当涉及到消费者实例的数量时,谈论线程是没有意义的。

MassTransit 在 IO 方面是完全异步的,它会实例化相同消费者的多个实例来处理负载。您可以通过在您的配置中设置 ConcurtrentMessageLimit 来指定给定接收端点的并发消费者数量,因为它是 described in the docs. Remember also to adjust the prefetch count,因此您实际上获得了您想要的并发级别。