C# web场景中的MassTransit IBusControl实例生命周期管理

C# web场景中的MassTransit IBusControl实例生命周期管理,c#,rabbitmq,masstransit,C#,Rabbitmq,Masstransit,我正在使用MassTransit 3从web服务器向RabbitMQ发布消息。我的IBusControl实例是手动创建的,但它包装在服务中。该服务是使用StrctureMap 2注入的,并且属于请求范围。IBusControl实例随服务一起释放。我选择这种方法主要是因为在我没有手动处理IBusControl实例的时候,我开始注意到管理控制台中有很多废弃的连接 然而,我担心的是,它需要在每次请求时打开和关闭与RabbitMQ的连接,特别是在高负载环境(聊天应用程序)中——这是不“便宜”的。另一种选

我正在使用MassTransit 3从web服务器向RabbitMQ发布消息。我的IBusControl实例是手动创建的,但它包装在服务中。该服务是使用StrctureMap 2注入的,并且属于请求范围。IBusControl实例随服务一起释放。我选择这种方法主要是因为在我没有手动处理IBusControl实例的时候,我开始注意到管理控制台中有很多废弃的连接

然而,我担心的是,它需要在每次请求时打开和关闭与RabbitMQ的连接,特别是在高负载环境(聊天应用程序)中——这是不“便宜”的。另一种选择是将其设为单例,但我担心由于大量请求而导致的并发问题

我想知道在web场景中IBusControl实例的生命周期管理方面是否有最佳实践。如果没有,还有其他我错过的选择吗

编辑:在做了更多的研究之后,在RabbitMQ文档(和中的)的帮助下,似乎最好的方法是在应用程序的生命周期内使用单个连接,但为每个线程创建通道,这相当于为每个web请求创建一个通道


现在的问题是,当通过MassTransit进行发布时,它是否在保持相同连接的同时每次都使用新频道?

只要在服务生命周期内保持IBusControl活动即可。MassTransit将在幕后完成所有其他工作。