提高 RabbitMQ 发布的性能(RabbitMQ C# 客户端)

Improve performance of RabbitMQ publish (RabbitMQ C# client)

我正在使用以下代码将消息发布到 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 条消息。系统 (2x3.16 GHz) 的 cpu 负载几乎达到 100%。有没有办法提高这个消息率?我的第一个想法是使用批量发布操作,但在 RabbitMQ 中似乎没有类似的东西。我的第二个想法是使用 Parallel.ForEach 而不是 foreach,但这并没有改变消息速率。

将队列定义为 "Durable" 具有在 rabbit 或服务器重启后幸存的额外好处。缺点是要完成此操作,它会将数据写入磁盘,成本很高。

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

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