【发布时间】:2015-02-11 09:57:17
【问题描述】:
现在,我们发布大量消息的代码如下所示:
foreach (var message in messages)
{
publisher.Publish(message);
}
是否存在一次通过通道发送多个消息的能力?
publisher.Publish(messages);
或者如果我们分块
var chunks = messages.Chunk(100);
foreach (var chunk in chunks)
{
publisher.Publish(chunk);
}
【问题讨论】:
-
我环顾四周,我认为 RabbitMQ 不支持批处理。您的服务器和客户端之间的延迟真的很高吗?
-
@Asad 是的,就是这样。我们不经常发布,但当我们发布时,我们有大约 50 万条消息要发布。
-
您是否真正分析并确定这是您系统中的瓶颈?我认为最好的办法就是像您现在所做的那样发布,并让 AMQP 在您的网络和消费者允许的范围内尽快处理它。如果您确实遇到性能问题,也许可以发送自定义的“分块”消息,就像您在上面所做的那样,然后让更接近消费者的东西接收它并发布组成消息。
-
@Asad 这不是瓶颈,但会导致超时。我的意思是对执行发布的服务的调用超时。也许我们需要重新审视我们是如何包装我们的发布代码的,因为我们目前有一个带有内部锁的单例发布者(因为通道不是线程安全的)。发送消息聚合也可以。
-
多线程发布使用更多通道?为什么不呢?