.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,因此您实际上获得了您想要的并发级别。
我可以创建一个 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,因此您实际上获得了您想要的并发级别。