Масстранзит 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

Другие вопросы по тегам