ConcurrencyLimit和PrefetchCount有什么区别?

时间:2019-07-29 17:05:21

标签: c# rabbitmq masstransit

masstransit中的ConcurrencyLimit和PrefetchCount有什么区别?以及针对它们的优化配置。

1 个答案:

答案 0 :(得分:5)

PrefetchCount是代理级别的设置。它向RabbitMQ(或Azure Service Bus)指示应将多少条消息推送到客户端应用程序,以便可以进行处理。

  

此外,如果RabbitMQ使用者具有可用的预取空间,则已发布的消息会立即写入该使用者,从而减少总体消息延迟。因此,在使用者上具有可用的预取空间可以提高整体邮件吞吐量。

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

如果消息处理速度非常快,但不能同时处理,则可以使用ConcurrencyLimit设置限制,以避免CPU过载。但是,超快速消息消耗增加了从代理请求更多消息所花费时间的敏感性。因此,建议快速邮件使用者使用更高的预取次数。

对于速度较慢的使用者(例如进行外部呼叫的使用者),其中使用者的持续时间更多地取决于速度较慢的外部系统,较高的并发限制可以提高整体吞吐量。在这种情况下,较高的预取计数不会增加太多,但至少应与并发限制一样高。

如果要向外扩展(与使用方竞争),那么这是一项调优练习,以确定多少实例,并发使用方和预取消息有意义。

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