【问题标题】:rabbitmq connection best practices do we maintain persistent connection in the publisherrabbitmq 连接最佳实践我们是否在发布者中维护持久连接
【发布时间】:2016-08-22 04:37:37
【问题描述】:

一般来说,SQL 连接的最佳实践是打开连接、执行查询和释放连接。但是,对于像 RabbitMQ 这样的基于 AMQP 的队列服务器,推荐的做法是什么。应用程序是否需要维护到 RabbitMQ 服务器的持久连接,或者为发布者端发送的每条消息打开和关闭连接。

public static void Main(string[] args)
    {
        var factory = new ConnectionFactory() { HostName = "localhost" };
        using(var connection = factory.CreateConnection())
        using(var channel = connection.CreateModel())
        {
            channel.ExchangeDeclare(exchange: "logs", type: "fanout");

            var message = GetMessage(args);
            var body = Encoding.UTF8.GetBytes(message);
            channel.BasicPublish(exchange: "logs",
                                 routingKey: "",
                                 basicProperties: null,
                                 body: body);
            Console.WriteLine(" [x] Sent {0}", message);
        }

        Console.WriteLine(" Press [enter] to exit.");
        Console.ReadLine();
    }

    private static string GetMessage(string[] args)
    {
        return ((args.Length > 0)
               ? string.Join(" ", args)
               : "info: Hello World!");
    }

【问题讨论】:

    标签: c# connection rabbitmq amqp


    【解决方案1】:

    在 RMQ 中,连接被认为是“昂贵的”——它们占用 TCP/IP 端口,需要握手/协商等。虽然这在 SQL Server 领域似乎微不足道,但当您谈论每秒发送 100K+ 消息时在 RabbitMQ 中,这种开销变得不可行。

    因此,对于 RMQ,一般的最佳实践是为每个应用程序实例打开一个连接并尽可能长时间地保持打开状态 - 如果可以的话,在应用程序实例的生命周期内保持打开状态。

    在应用实例中,您可以在 RMQ 连接之上创建通道。你可以非常快速地创建这些。大多数应用程序在 RMQ 中为单个事物使用单个通道。消息生产者?打开一个频道。从队列中消费?打开一个频道。重新定义队列?打开频道等

    另外 - 如果您使用具有线程的语言(如 C#),则必须将您的频道限制为单个线程。不要跨线程重复使用通道。如果您尝试这样做,将会发生非常糟糕的事情。

    【讨论】:

    • 我正在使用 RMQ 和长生不老药。我应该为我发布的每条消息创建一个新频道,还是为所有发布业务创建一个频道?
    • 所以要明确尽可能长时间地保持开放不是RMQ渠道的意图吗?它们只是快速接入和断开连接的方式,但不打算一直存在?
    • @jxramos 正确。尽可能晚地打开渠道。尽快关闭它们。它们的寿命很短。您也可以在需要时让它们打开更长的时间。
    • 哇,所以我当时在想,它们应该主要被视为 c# using 语句python 上下文管理器那种交易。很有趣。
    猜你喜欢
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 2015-03-25
    • 2018-12-20
    • 2019-08-26
    • 2015-08-03
    • 2012-10-10
    • 2022-07-08
    相关资源
    最近更新 更多