Перечитав документацию по обработке исключений, я решил вместо этого использовать DelayedRedelivery UseMessageRetry для повторной попытки получения сообщений, поскольку он не блокирует потребителя, ожидая интервала попытки, а использует возможности очереди.
Оказывается, что необходимо быть осторожным с настройкой длительный интервал времени, так как это может быть плохой практикой, по крайней мере, для UseMessageRetry.
В моем коде я использую следующее ConsumerDefinition:
Код: Выделить всё
internal class MyConsumerDefinition : ConsumerDefinition
{
protected override void ConfigureConsumer(IReceiveEndpointConfigurator endpointConfigurator, IConsumerConfigurator consumerConfigurator, IRegistrationContext context)
{
endpointConfigurator.UseKillSwitch(options =>
{
options
.SetActivationThreshold(100)
.SetTripThreshold(0.2) // 20%
.SetRestartTimeout(TimeSpan.FromMinutes(5))
.SetExceptionFilter(configurator =>
{
configurator.Handle(typeof(SocketException), typeof(EndpointNotFoundException), typeof(TimeoutException), typeof(FaultException));
});
});
endpointConfigurator.UseDelayedRedelivery(r =>
{
r.Handle(typeof(SocketException), typeof(EndpointNotFoundException), typeof(TimeoutException), typeof(FaultException));
r.Interval(3, TimeSpan.FromMinutes(15));
});
}
}
Код: Выделить всё
bus.AddConsumer(typeof(MyConsumerDefinition));
bus.AddConsumer();
bus.AddConsumer();
- Что рекомендуется /max хороший интервал для параметров RestartTimeout в UseKillSwitch?
- Для метода UseDelayedRedelivery можно установить интервал в 15 минут или это слишком долго?
- Если Я применяю ConsumerDefinition только для MyConsumer, затем эти настройки автоматически применяются для других потребителей (OtherConsumer2, OtherConsumer3)?
Можно ли одновременно использовать KillSwitch и DelayedRedelivery?
Подробнее здесь: https://stackoverflow.com/questions/786 ... asstransit
Мобильная версия