我是NServiceBus的新手,并试图找到使用补偿交易建模的最佳方式。
例如,假设我有一个典型的BookHotel场景:
在快乐的情况下,消息流将按如下方式进行:
我如何在上述流程中对补偿交易进行建模?我最初想的是打电话给#34; UnbookHotelSaga"在上面的一个回复中,基于一些商业条件。然而,我似乎遇到了一些工作的挑战。如果这是正确的方法,有佐贺的人可以体验评论。
这是我想通过调用另一个Saga来实现的方案:
有人可以就实施补偿交易的最佳做法提出建议吗?
答案 0 :(得分:2)
我不确定我是否理解长时间运行的过程及其应该做的事情。有关功能的更多信息可能会有所帮助。
我注意到的第一件事是提到IUnbookRentalMessage
。首先,不要在消息开头使用I
。它们可以是接口的事实与.NET的多态性和多继承特性有关。消息本身在线路上没有技术含义,因此您不应包含I
。
此外,命令位于imperative tense和past tense中的事件。因此,BookFlight
表示命令,FlightBooked
表示事件。
理论上,您可以创建多个传闻,这些传奇都参与一个长期运行的业务流程。一个名为BookingPolicy
或BookingProcess
或BookingSaga
的传奇,用于协调整个过程。该航班为FlightBookingPolicy
,酒店为HotelBookingPolicy
。
如果您从BookFlight
命令开始,FlightBookingPolicy
可以发布名为FlightBooked
的事件。 BookingPolicy
可以使用该事件来启动自己的saga实例。例如,发送所有命令的(ASP.NET)网站不必知道BookingPolicy
。它只是发送带有适当数据的适当命令。酒店,汽车等也是如此。
然后在某个时候,网站发送CommitBooking
或FinishUpMyVacation
命令,确实到达在BookingPolicy
传奇,并最终确定整个预订。它发送一个事件BookingFinishingUp
或其他东西。根据该事件,某些处理程序可能会从信用卡中扣除资金。另一个处理程序与第三方集成以实际提交假期。另一个处理程序发送电子邮件。等等。
最后,当BookingPolicy
(或甚至另一个传奇)完成后,BookingPolicy
传奇将发布一个名为BookingFinished
的事件和相应的{{1并且FlightBookingPolicy
和HotelBookingPolicy
也会结束并结束他们的工作。无论那是什么。
这有意义吗?如果需要,您还可以继续https://discuss.particular.net/或support@particular.net上的对话。