[英]nservicebus calling a Saga from within another Saga
我是NServiceBus的新手,正在嘗試尋找對使用補償交易的方案進行建模的最佳方法。
例如,假設我有一個典型的BookHotel場景:
在令人滿意的情況下,消息傳遞流程將如下進行:
在上述流程中,如何對補償交易進行建模? 最初,我根據某些業務狀況考慮在上述答復之一中稱呼“ UnbookHotelSaga”。 但是,在使此工作正常進行方面,我似乎遇到了一些挑戰。 如果這是正確的方法,具有Saga的人可以發表評論嗎?
這是我認為可以通過調用另一個Saga來實現的方案:
有人可以建議實施補償交易的最佳實踐方法嗎?
我不太確定自己是否了解長期運行的流程及其應采取的措施。 有關功能的更多信息可能會有所幫助。
我注意到的第一件事就是提到IUnbookRentalMessage
。 首先,請勿在消息開頭使用I
它們可以是接口的事實與.NET的多態性和多重繼承功能有關。 消息本身在線路上沒有技術意義,因此您不應包含I
同樣,命令使用命令式時態 ,事件使用過去式 。 因此, BookFlight
用於命令,而FlightBooked
用於事件。
從理論上講,您可以創建多個Sagas,它們全部參與一個長期運行的業務流程。 一個稱為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繼續對話。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.