大众运输中的 ConcurrencyLimit 和 PrefetchCount 有什么区别?以及它们的优化配置是什么。

最佳答案

PrefetchCount 是经纪人级别的设置。它向 RabbitMQ(或 Azure 服务总线)指示应将多少消息推送到客户端应用程序,以便它们准备好进行处理。


ConcurrencyLimit 是客户端级别的东西,表示将同时消费的最大消息数。这可能是由于资源限制,或者是为了避免数据库过载等。

在消息处理速度非常快但不能同时处理太多的情况下,可以使用 ConcurrencyLimit 设置限制以避免 CPU 过载。但是,超快的消息消耗增加了对从代理请求更多消息所需时间的敏感性。因此,对于快速消息消费者,建议使用更高的预取计数。

对于缓慢的消费者,例如那些进行外部调用的消费者,消费者的持续时间更依赖于缓慢的外部系统,更高的并发限制可以增加整体吞吐量。在这种情况下,更高的预取计数不会增加太多,但它至少应该与并发限制一样高。

如果您要向外扩展(竞争消费者),那么这是一个调整练习,以确定有多少实例、并发消费者和预取消息是有意义的。

例如,我们有一个数据库使用者,它在开始阻塞之前可以在 SQL 服务器上运行多达 100 个并发事务,因此我们运行并发限制为 100,预取为 110。

关于c# - ConcurrencyLimit 和 PrefetchCount 有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57258424/

10-13 06:58