将RabbitMQ连接包装为单例类

时间:2019-02-27 09:04:19

标签: c# design-patterns rabbitmq singleton

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

我写了这个课:

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; }
}

并像这样使用

var channel = RabbitConnection.Instance.Connection.CreateModel();
channel.QueueDeclare("myQueue", true, false, false, null);
....

此实现是对还是错? 谢谢

1 个答案:

答案 0 :(得分:1)

  

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

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


注意: RabbitMQ团队监视rabbitmq-users mailing list,并且有时仅在StackOverflow上回答问题。