performance - 我可以让 MassTransit 重用消费者实例,而不是为每条消息创建一个新实例吗?

标签 performance masstransit

我(直到今天)假设 MassTransit ServiceBusFactory 的 Subscribe(如下所用)将在启动时负责创建消费者,并且如果消费者消失,可能会重新创建它们,但是一旦事情启动并运行,更多的消费者就会不是即时创建的。

我今天正在做一些性能调整,发现我的 Consumer 构造函数正在被调用以处理似乎每条消息。

这是我正在使用的 Start() 方法示例,用于注册消费者订阅(硬编码为 1 个消费者以进行测试)。

static void Start()
        {
            var consumerLimit = ConfigurationProvider.GetSetting("ConsumerLimit", Math.Min(2, Environment.ProcessorCount));
            var controlQueueUri = ConfigurationProvider.GetServiceBusUriFromSetting("ControlQueueName");

            _bus = ServiceBusFactory.New(x =>
            {
                x.UseRabbitMq(rmq => rmq.ConfigureRabbitMqHost(ConfigurationProvider));
                x.ReceiveFrom(controlQueueUri);
                x.SetConcurrentConsumerLimit(1);                
                x.SetCreateMissingQueues(true);
                x.UseNLog();
                x.DisablePerformanceCounters();
                x.Validate();
                x.Subscribe(s => s.Consumer(() =>
                    new MyConsumer()
                    );

            });
        }

有没有办法告诉 MassTransit 重用这些 Consumer 实例?或者我是否需要假设将为每个请求创建消费者,并从为每个消费者实例创建运行中提取更繁重的设置工作?

最佳答案

当然,这很简单。因此,Consumer 方法注册一个工厂,或返回消费者的 Func。因此,您可以拥有 MyConsume 和 _myConsumer 的私有(private)实例,而不是 new MyConsumer()。或者如果您使用的是容器,则可以在容器中设置生命周期。

关于performance - 我可以让 MassTransit 重用消费者实例,而不是为每条消息创建一个新实例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25253954/

相关文章:

MySQL 查询速度或行读取

.net - 计算CPU使用率: Code improvement

performance - 计算移动平均线最有效的数据结构是什么?

rabbitmq - 公共(public)交通 : ensure message processing order when there are different message types

amazon-sqs - 使用带有 amazon SQS 的一个队列的 Masstransit 的简单示例

asp.net-mvc - 订阅 ServiceBus 以获取通知

c# - 如何使用 MassTransit 为多个消费者订阅一个队列?

asp.net - 减少应用程序构建/调试时间的方法

c++ - 什么时候应该使用字符串而不是字符串流?

masstransit - 使用 Masstransit 和 Azure 服务总线将故障消息发送到主题订阅死信队列