【问题标题】:Improve performance of RabbitMQ publish (RabbitMQ C# client)提高 RabbitMQ 发布的性能(RabbitMQ C# 客户端)
【发布时间】:2015-02-25 16:44:28
【问题描述】:

我正在使用以下代码将消息发布到 RabbitMQ 队列:

ConnectionFactory factory = new ConnectionFactory {
    HostName = hostName,
    Port = port,
    UserName = userName,
    Password = password,
    VirtualHost = "/",
    Protocol = Protocols.DefaultProtocol
};
connection = factory.CreateConnection();
channel = connection.CreateModel();
channel.QueueDeclare(queue, true, false, false, null);
foreach (string message in messages) {
    byte[] body = Encoding.UTF8.GetBytes(message);
    channel.BasicPublish("", queue, null, body);
}

在将消息发布到本地 RabbitMQ 服务器时,我得到的消息速率高达每秒 10,000 条消息。系统的 CPU 负载 (2x3.16 GHz) 几乎是 100%。有没有办法提高这个消息率?我的第一个想法是使用批量发布操作,但在 RabbitMQ 中似乎没有类似的东西。我的第二个想法是使用 Parallel.ForEach 而不是 foreach,但这并没有改变消息速率。

【问题讨论】:

  • 出于好奇,你为什么需要一秒钟发送这么多消息?

标签: c# rabbitmq publish amqp


【解决方案1】:

将队列定义为“持久”具有在兔子或服务器重启后幸存的额外好处。缺点是要做到这一点,它会将数据写入磁盘,成本很高。

如果您最关心的是吞吐量,并且在发生故障时丢弃几条消息不是问题,那么设置“Durable=false”会增加您的吞吐量。

注意:如果队列长度足够长,即使设置了耐用=false,它也会将它们转储到磁盘(毕竟机器上只有这么多内存)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 2022-08-09
    • 2012-08-14
    相关资源
    最近更新 更多