提高 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 如果队列长度变得足够长,它也会将它们转储到磁盘(毕竟,机器上只有这么多内存)。
我正在使用以下代码将消息发布到 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 如果队列长度变得足够长,它也会将它们转储到磁盘(毕竟,机器上只有这么多内存)。