MassTransit — повторная отправка сообщения при выполнении ошибки маршрутизации

#masstransit #routing-slip

#masstransit #прокладывание маршрута-скольжение

Вопрос:

Я работаю над проектом с использованием masstransit Courier. Я пытаюсь повторно отправить сообщение для повторного выполнения действия через 1 час. Это мой код в методе execute activity:

         await context.Redeliver(TimeSpan.FromMinutes(60));
        var (success, message) = await client.performHttpRequest();
        if(!success amp;amp; context.GetRedeliveryCount() < 10))
        {
            await context.Redeliver(TimeSpan.FromMinutes(60));
        }
 

Но вместо повторной доставки начинается компенсация.
Я что — то пропустил ?

Ответ №1:

Единственный известный мне способ повторной доставки с помощью действий с проскальзыванием маршрутизации — это использование UseScheduledRedelivery промежуточного программного обеспечения. Вы можете создать исключение, которое перехватывается промежуточным программным обеспечением (вы можете фильтровать типы исключений, чтобы повторно доставлять только определенные типы), и MassTransit обработает повторную доставку за вас.

Например, если вы бросили a RescheduleException , вы бы настроили запланированную повторную доставку, как показано на рисунке:

 endpoint.UseScheduledRedelivery(r => 
{
    r.Handle<RescheduleException>();
    r.Intervals(TimeSpan.FromMinutes(5), TimeSpan.FromMinutes(15), TimeSpan.FromMinutes(30)));
});