Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以使用C#的RabbitMQ客户端一次发布多条消息?_C#_Rabbitmq - Fatal编程技术网

是否可以使用C#的RabbitMQ客户端一次发布多条消息?

是否可以使用C#的RabbitMQ客户端一次发布多条消息?,c#,rabbitmq,C#,Rabbitmq,现在,我们发布大量消息的代码如下所示: foreach (var message in messages) { publisher.Publish(message); } 是否存在一次通过通道发送多条消息的能力 publisher.Publish(messages); 或者,如果我们 var chunks = messages.Chunk(100); foreach (var chunk in chunks) { publisher.Publish(chunk); } 对于

现在,我们发布大量消息的代码如下所示:

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,AMQP协议对于生产和消费操作是异步的,因此不清楚如何从现成的批处理消费者端点中获益


您可以做的是为分块消息创建端点,并在工作流中处理它们(如果可以加快操作的话)。因此,一种解决方案是,例如,在发布者类之前包含批处理组件,并发送自定义消息。

对于当前版本的RabbitMq(3.8.2),您可以按如下方式为c#client sdk发送批处理消息:

basicPublishBatch=channel.CreateBasicPublishBatch();
添加(“exchange”、“routeKey”、false、null、新字节[]{1});
添加(“exchange”、“routeKey”、false、null、新字节[]{1});
basicPublishBatch.Publish();
检查此请购单:

我已经环顾四周,我认为RabbitMQ不支持批处理。您的服务器和客户端之间的延迟真的很高吗?@Asad是的,确实如此。我们不经常发布,但当我们发布时,我们有大约500000条消息要发布。您是否确实分析并确定这是您系统中的一个瓶颈?我认为最好的办法就是像你现在这样发布,让AMQP在你的网络和消费者允许的范围内尽快处理。如果确实存在性能问题,也许可以像上面所做的那样发送一条自定义的“分块”消息,然后让更接近消费者的人接收并发布组成消息。@而且这不是瓶颈,但会导致超时。在这方面,我指的是对执行发布超时的服务的调用。也许我们需要重新访问如何包装发布代码,因为我们目前有一个带有内部锁的单例发布服务器(因为通道不是线程安全的)。发送消息聚合也可以。多线程发布是否使用更多通道?为什么不呢?您知道关于如何将批处理消息拆分到队列的资源吗?