亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Axon Framework:Saga 項目,具有兩個或三個微服務之間的補償事件

Axon Framework:Saga 項目,具有兩個或三個微服務之間的補償事件

幕布斯6054654 2023-07-28 16:58:51
我有一個關于 Axon Saga 的問題。我有一個項目,其中有三個微服務,每個微服務都有自己的數據庫,但是兩個“從屬”微服務必須將其數據共享給“主”微服務,為此我想使用 Axon Saga。我已經問過關于賠償的問題,出了問題,我必須自己處理賠償,還可以,但不太理想。目前我正在使用 DistributedCommandBus 在微服務之間進行通信,這有好處嗎?我正在使用 Choreography Saga 模型,所以現在的樣子是這樣的:主站 -> 發送命令 -> 從站1 -> 處理事件Slave1 -> 發回命令 -> Master -> 處理事件Master -> 發送命令 -> Slave2 -> 處理事件Slave2 -> 發回命令 -> Master -> 處理事件如果出現問題,則會向后補償命令/事件。我的問題是,是否有人對 Axon 做過類似的事情,并有補償,最佳做法是什么?如何重試 Saga 進程?使用重試調度程序?如果可以的話添加一個 github 存儲庫。謝了哥們
查看完整描述

2 回答

?
不負相思意

TA貢獻1777條經驗 獲得超10個贊

首先,讓我回答你的主要問題:

我的問題是有人對 Axon 做過類似的事情嗎?

很快,是的,因為這是 Sagas 的主要用例之一。根據經驗,我想說 Saga 可用于協調以下之間的復雜業務事務

  1. 幾個不同的聚合實例

  2. 幾種限界上下文

從表面上看,您似乎已經選擇了委托復雜業務交易的第二種選擇。

需要注意的是,當您使用 Sagas 時,您應該非常有意識地處理任何異常和/或命令調度結果。

因此,如果您從“Master”向“Slave 1”發送命令,而后者操作失敗,則該結果將返回到 Saga。因此,這為您提供了重試操作的第一個選項,我建議使用補償操作來執行此操作。最后,通過補償操作,我正在討論發送命令來觸發它。

如果您不能依賴調度命令的直接響應,那么在 Saga 中重試/重新安排消息將是合理的第二個選擇。

為此,Axon 擁有EventSchedulerDeadlineManager。請注意,兩者中的前者發布了一個事件供所有人查看。后者DeadlineMessage在單個 Saga 實例的上下文中安排 a,從而限制了誰可以看到正在發生重試的范圍。

通常,這DeadlineManager將是我首選的操作模式,除非您要求每個人都看到這種“重新安排操作”。

示例更新

下面是一些偽代碼,可以讓您了解 Saga 事件處理程序中的補償操作是什么樣子的:

class SomeSaga {


? ? private CommandGateway commandGateway;


? ? @SagaEventHandler(assocationValue = "some-key")

? ? public void on(SomeEvent event) {

? ? ? ? // perform some checks, validation and state setting, if necessary

? ? ? ? commandGateway.send(new MyActionCommand(...))

? ? ? ? ? ? ? ? ? ? ? .exceptionally(throwable -> {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?commandGateway.send(new CompensatingAction(...));

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?});

? ? }

}


查看完整回答
反對 回復 2023-07-28
?
慕俠2389804

TA貢獻1719條經驗 獲得超6個贊

我不知道您的確切用例,但從這個問題和您上一個問題中,我得到的印象是您想要回滾,或者在本例中撤消事件,如果事件處理程序之一無法處理該事件。

一般來說,您可以做一些事情。您可以查看首先應用該事件的聚合是否具有或可以具有信息來檢查“從屬”微服務是否應該能夠在應用該事件之前處理該事件。如果這不切實際,從屬微服務還可以直接在事件總線上應用“失敗”事件,以通知系統的其余部分已發生需要處理的失敗狀態。

查看完整回答
反對 回復 2023-07-28
  • 2 回答
  • 0 關注
  • 194 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號