Масстранзит Saga redelivery
Я хотел бы настроить повторное получение расписания сообщений для саги о состоянии машины с использованием автономного кварцевого планировщика. Теперь он работает нормально с обычным потребителем, но я не могу правильно настроить повторную доставку саги. Моя конфигурация саги выглядит так:
MassTransit.Bus.Factory.CreateUsingRabbitMq(cfg =>
{
var retryPolicy = Retry.Incremental(5, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(2));
cfg.UseMessageScheduler(new Uri($"rabbitmq://localhost/SchedulerQueue"));
var host = cfg.Host(new Uri(uri), h =>
{
h.Username(config.RabbitMqUser);
h.Password(config.RabbitMqPassword);
});
cfg.ReceiveEndpoint(host, "SagaQueue", e =>
{
e.Durable = true;
e.StateMachineSaga(new MySaga(),
repository, c =>
{
c.UseTransaction();
c.Message<ISagaEvent>(y => y.UseScheduledRedelivery(retryPolicy));
});
});
});
где ISagaEvent - сообщение, обработанное сагой. Я что-то не так делаю, и есть ли способ настроить запланированную повторную доставку для саги вообще?
1 ответ
Для составления расписания в рамках саги, как правило, лучше всего использовать функцию расписания для конечного автомата, поэтому состояние саги обновляется, чтобы указать повторную доставку.
По сути, если вы получаете событие в состоянии, которое еще не готово к нему, используйте Schedule()
запланировать сообщение на некоторое время в будущем, когда сага может находиться в состоянии, когда оно может быть обработано.
Хороший пример расписания приведен в документации: http://masstransit-project.com/MassTransit/advanced/sagas/automatonymous.html