nservicebus, называющий сагу из другой саги - PullRequest
0 голосов
/ 24 мая 2018

Я новичок в NServiceBus и пытаюсь найти лучший способ моделирования сценария, в котором используются компенсирующие транзакции.

Например, скажем, у меня есть типичный сценарий BookHotel:

ВВ этом случае поток сообщений будет выглядеть следующим образом:

  1. BookHotelCommand -> BookHotelSaga
  2. BookFlightCommand -> Ответить IFlightBookedMessage
  3. BookRentalCommand -> Ответить IRentalBookedMessage
  4. ReplyToOriginator -> HotelBookedMessage

Как бы я смоделировал компенсирующие транзакции в вышеуказанном потоке?Сначала я думал о том, чтобы назвать «UnbookHotelSaga» в одном из приведенных выше ответов, исходя из некоторых условий ведения бизнеса.Тем не менее, я, кажется, сталкиваюсь с некоторыми проблемами с получением этой работы.Может ли кто-нибудь с опытом саги прокомментировать, если это правильный подход.

Вот сценарий, который, как я думал, будет работать при вызове другой саги:

  1. BookHotelCommand -> BookHotelSaga
  2. BookFlightCommand -> Ответить IFlightBookedMessage
  3. BookRentalCommand -> (условие выполнено) -> UnbookHotelCommand -> UnbookHotelSaga
  4. UnbookRentalCommand -> Ответить IUnbookRentalMessage
  5. UnbookFlightCommand -> Ответить IUnbookFlightMessage

Может ли кто-нибудь посоветовать наилучший подход к осуществлению компенсирующих транзакций?

1 Ответ

0 голосов
/ 24 мая 2018

Я не совсем уверен, что понимаю длительный процесс и что он должен делать.Возможно, поможет еще немного информации о функциональности.

Первое, что я заметил, было упоминание о IUnbookRentalMessage.Прежде всего, не используйте I в начале сообщений.Тот факт, что они могут быть интерфейсами, связан с полиморфизмом и множественными возможностями наследования .NET.Сами сообщения не имеют технического значения в сети, и поэтому вы не должны включать I.

Кроме того, команды находятся в императивном времени и событиях в прошедшем времени ,Так что BookFlight для команды и FlightBooked для события.

Теоретически можно создать несколько саг, которые все участвуют в одном длительном бизнес-процессе.Сага под названием BookingPolicy или BookingProcess или BookingSaga для организации всего процесса.И FlightBookingPolicy для полета и HotelBookingPolicy для отеля.

Если вы начинаете с команды BookFlight, FlightBookingPolicy может опубликовать событие под названием FlightBooked.BookingPolicy может использовать это событие для запуска своего собственного экземпляра саги.Так, например, веб-сайт (ASP.NET), который отправляет все команды, не должен знать о BookingPolicy.Он просто отправляет соответствующие команды с соответствующими данными.То же самое касается отеля, автомобиля и т. Д.

Затем в какой-то момент веб-сайт отправляет команду CommitBooking или FinishUpMyVacation, которая действительно приходит в сагу BookingPolicy иэто завершает весь заказ.Он отправляет событие BookingFinishingUp или что-то.Исходя из этого события, какой-то обработчик может вычесть деньги из кредитной карты.Другой обработчик выполняет интеграцию с третьими сторонами для фактического предоставления отпуска.Другой обработчик рассылает электронные письма.Etcetera.

Наконец, когда BookingPolicy (или даже другая сага ) закончена, сага BookingPolicy опубликует событие под названием BookingFinished и соответствующие FlightBookingPolicy и HotelBookingPolicy и CarBookingPolicy также завершают и заканчивают свою работу.Что бы это ни было.

Имеет ли это смысл?Если вы хотите, вы также можете продолжить разговор по https://discuss.particular.net/ или support@particular.net.

...