masstransit?中ConcurrencyLimit和PrefetchCount之间的区别是什么?它们的优化配置是什么?
l0oc07j21#
PrefetchCount是一个代理级别的设置。它向RabbitMQ(或Azure服务总线)指示应该将多少消息推送到客户端应用程序,以便它们准备好进行处理。此外,如果RabbitMQ使用者有可用的预取空间,则发布的消息会立即写入使用者,从而减少整体消息延迟。因此,使用者上有可用的预取空间可以提高整体消息吞吐量。ConcurrentMessageLimit是一个客户端级别的东西,它表示将被并发使用的最大消息数。这可能是由于资源限制,或者是为了避免数据库过载等。如果消息处理速度非常快,但无法同时处理 * 太多 *,则可以使用ConcurrentMessageLimit设置限制,以避免CPU过载。但是,超快的消息使用会增加对从代理请求更多消息所需时间的敏感度。因此,建议快速消息使用者使用更高的预取计数。对于较慢的使用者(例如进行外部调用的使用者),其使用者持续时间更依赖于较慢的外部系统,较高的并发限制可以提高总体吞吐量。在这种情况下,较高的预取计数不会增加太多,但至少应与并发限制一样高。如果您要向外扩展(竞争使用者),那么需要进行调整,以确定有多少示例、并发使用者和预取消息是有意义的。例如,我们有一个数据库使用者,在SQL服务器开始阻塞之前,它最多可以在SQL服务器上运行100个并发事务,因此我们将并发限制设为100,预取为110。
PrefetchCount
ConcurrentMessageLimit
1条答案
按热度按时间l0oc07j21#
PrefetchCount
是一个代理级别的设置。它向RabbitMQ(或Azure服务总线)指示应该将多少消息推送到客户端应用程序,以便它们准备好进行处理。此外,如果RabbitMQ使用者有可用的预取空间,则发布的消息会立即写入使用者,从而减少整体消息延迟。因此,使用者上有可用的预取空间可以提高整体消息吞吐量。
ConcurrentMessageLimit
是一个客户端级别的东西,它表示将被并发使用的最大消息数。这可能是由于资源限制,或者是为了避免数据库过载等。如果消息处理速度非常快,但无法同时处理 * 太多 *,则可以使用ConcurrentMessageLimit设置限制,以避免CPU过载。但是,超快的消息使用会增加对从代理请求更多消息所需时间的敏感度。因此,建议快速消息使用者使用更高的预取计数。
对于较慢的使用者(例如进行外部调用的使用者),其使用者持续时间更依赖于较慢的外部系统,较高的并发限制可以提高总体吞吐量。在这种情况下,较高的预取计数不会增加太多,但至少应与并发限制一样高。
如果您要向外扩展(竞争使用者),那么需要进行调整,以确定有多少示例、并发使用者和预取消息是有意义的。
例如,我们有一个数据库使用者,在SQL服务器开始阻塞之前,它最多可以在SQL服务器上运行100个并发事务,因此我们将并发限制设为100,预取为110。