首页 > 解决方案 > 在单例类中包装 RabbitMQ 连接

问题描述

我已经读过,当我使用 RabbitMQ 时,最佳实践是每个进程使用一个连接,所以我想为 rabbitmq 连接创建一个单例类。我想使用来自: Implementing the Singleton Pattern in C#的懒惰版本的 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; }
}

并像这样使用:

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

这个实现是对还是错?谢谢

标签: c#design-patternsrabbitmqsingleton

解决方案


我已经读过,当我使用 RabbitMQ 时,最佳做法是每个进程使用一个连接

不,这是不正确的。您应该使用与用例需求一样多的连接,并通过使用预期工作负载的基准来确定连接/通道数。


注意: RabbitMQ 团队会监控rabbitmq-users 邮件列表,有时只会在 StackOverflow 上回答问题。


推荐阅读