PrefetchCount与ConcurrentMessageLimit对KillSwitch重启接收端点的影响
MassTransit KillSwitch 配置疑问:ConcurrentMessageLimit与PrefetchCount对端点重启的影响
我在配置KillSwitch时,发现它有时无法重启接收端点(恢复消费),目前还没完全搞懂ConcurrentMessageLimit和PrefetchCount的配置值如何影响重启能力。
接收端点可正常重启的场景
- 未设置ConcurrentMessageLimit和PrefetchCount
- ConcurrentMessageLimit = 1,PrefetchCount = 1
- ConcurrentMessageLimit = 1,PrefetchCount = 2
完全无法重启的场景
- ConcurrentMessageLimit = 1,未设置PrefetchCount
仅能重启一次或完全无法重启的场景
- ConcurrentMessageLimit = 5,PrefetchCount = 25
无法正常停止的场景(日志显示已达阈值,但端点未完全停止,仍处于Healthy状态,预期应为Degraded)
- ConcurrentMessageLimit = 1,PrefetchCount = 4
- ConcurrentMessageLimit = 1,PrefetchCount = 5
上述场景的行为在传入消息100%故障与约30%故障时也存在差异。
目前看来ConcurrentMessageLimit = 1且PrefetchCount = 1是稳定可靠的安全配置,但我想了解这背后的原因。
配置代码示例
protected override void ConfigureConsumer(IReceiveEndpointConfigurator endpointConfigurator, IConsumerConfigurator<Consumer<TInMessage, TProcessable>> consumerConfigurator) { endpointConfigurator.ConfigureDeadLetterQueueDeadLetterTransport(); endpointConfigurator.ConfigureDeadLetterQueueErrorTransport(); consumerConfigurator.UseConcurrentMessageLimit(1); //endpointConfigurator.PrefetchCount = 1; endpointConfigurator.UseKillSwitch(options => options .SetActivationThreshold(3) .SetTripThreshold(0.1) .SetRestartTimeout(m: 1) ); }
内容的提问来源于stack exchange,提问作者damian5996
相关产品推荐
相关产品推荐

