C# 在单例类中包装RabbitMQ连接

C# 在单例类中包装RabbitMQ连接,c#,design-patterns,rabbitmq,singleton,C#,Design Patterns,Rabbitmq,Singleton,我已经读到,当我使用RabbitMQ时,最佳实践是每个进程使用一个连接,因此我想为RabbitMQ连接创建一个单例类。我想从以下位置使用Singleton的惰性版本: 我写这节课: public class RabbitConnection { private static readonly Lazy<RabbitConnection> Lazy = new Lazy<RabbitConnection>(() => new RabbitConnectio

我已经读到,当我使用RabbitMQ时,最佳实践是每个进程使用一个连接,因此我想为RabbitMQ连接创建一个单例类。我想从以下位置使用Singleton的惰性版本:

我写这节课:

public class RabbitConnection
{
    private static readonly Lazy<RabbitConnection>  Lazy = new Lazy<RabbitConnection>(() => new RabbitConnection());

    private RabbitConnection()
    {
        IConnectionFactory connectionFactory = new ConnectionFactory
        {
            HostName = "127.0.0.1",
            Port = 5672,
            UserName = "Username",
            Password = "********"
        };

        Connection = connectionFactory.CreateConnection();
    }

    public static RabbitConnection Instance
    {
        get { return Lazy.Value; }
    }

    public IConnection Connection { get; }
}
这个实现是对还是错? 多谢各位

我已经读到,当我使用RabbitMQ时,最佳实践是使用RabbitMQ 每个进程的连接

不,这是不对的。您应该根据您的用例需求使用尽可能多的连接,并通过使用预期工作负载的基准来确定连接/通道计数


注意:RabbitMQ团队监控
RabbitMQ用户
,并且有时只回答有关StackOverflow的问题

我已经读到,当我使用RabbitMQ时,最佳实践是使用RabbitMQ 每个进程的连接

不,这是不对的。您应该根据您的用例需求使用尽可能多的连接,并通过使用预期工作负载的基准来确定连接/通道计数



注意:RabbitMQ团队监视
RabbitMQ用户
,并且有时只回答有关StackOverflow的问题。

Lazy
(在您的代码中使用,默认值为
LazyThreadSafetyMode
),如果您能够100%确保构造函数不会引发异常,则可以安全使用。由于有时很难知道(如果没有彻底的代码分析),我使用
LazyWithNoExceptionCaching
Lazy
(在您的代码中使用,默认的
LazyThreadSafetyMode
)是安全的,如果您可以100%确定构造函数不会引发异常。因为有时很难知道(没有彻底的代码分析),所以我使用了
LazyWithNoExceptionCaching
“最佳实践是重用连接,并使用通道多路复用线程之间的连接。理想情况下,每个进程应该只有一个连接,然后在应用程序中每个线程使用一个通道。”我想知道OP指的是“最佳实践是重用连接并在线程之间使用通道多路传输连接”。理想情况下,每个进程应该只有一个连接,然后在应用程序中每个线程使用一个通道。
var channel = RabbitConnection.Instance.Connection.CreateModel();
channel.QueueDeclare("myQueue", true, false, false, null);
....