Как мне завершить построение Saga на основе классов, чтобы удалить его из базы данных SQL (EF Core)? - PullRequest
0 голосов
/ 09 июня 2019

Я пытаюсь узнать больше о массовом транспорте, поскольку мы думаем о его принятии.Теперь у меня есть Saga на основе классов, которая работает должным образом:

public class EchoSaga : ISaga,
        InitiatedBy<TextEntered>,
        Orchestrates<TextEchoStart>,
        Orchestrates<EchoEnd>
    {
        public Guid CorrelationId { get; set; }
        public string CurrentState { get; set; }
        public string Text { get; set; }

        public Task Consume(ConsumeContext<TextEntered> context)
        {
            CurrentState = "Entered";
            Text = context.Message.Text;
            return Task.CompletedTask;
        }

        public Task Consume(ConsumeContext<TextEchoStart> context)
        {
            CurrentState = "Start";
            Text = context.Message.Text;
            return Task.CompletedTask;
        }

        public Task Consume(ConsumeContext<EchoEnd> context)
        {
            CurrentState = "End";
            Text = context.Message.Text;
            return Task.CompletedTask;
        }
    }

Saga на основе классов отличается от конечного автомата Saga и более подробно описана в документации в разделе Saga: http://masstransit -project.com / MassTransit / понимаю / key-ideas.html .

Как пометить Saga как завершенную после использования EchoEnd, чтобы она была удалена из базы данных (я уженастроить репозиторий)?Если бы я использовал конечный автомат Saga, то я мог бы сделать это:

.Finalize()
.SetCompletedWhenFinalized()

Как мне сделать это с помощью Saga на основе классов?

Я понимаю, что, возможно, немного отступлю назадздесь, однако, я пытаюсь узнать, как начался Mass Transit и где он сейчас находится, чтобы увидеть, отвечает ли он нашим требованиям.Пока очень доволен.

1 Ответ

1 голос
/ 10 июня 2019

Если вы разыгрываете ConsumeContext на SagaConsumeContext<TSaga, TMessage>, существует метод SetCompleted, который сигнализирует о завершении саги и может быть удален из хранилища.

Возможно, вам придется использовать context.GetPayload<SagaConsumeContext<TSaga, TMessage>>()если непосредственное приведение не работает (из-за использования прокси в конвейере).

...