5

最初の質問に取引を補償するので、私と一緒にクマたちはイベントの調達を使用してソリューションを設計しているイベントソーシングとサガ - SO(本当に?)に

:)をしてください。当社のビジネスプロセスの一部は、このように、我々はいくつかの集計根にコマンドを編成するサガを使用して計画している、長時間実行されます。私の理解で

、佐賀発行されたコマンドは、を障害が発生した場合、サガは、すべての以前に呼び出された集計のルーツに補償コマンドを発行する責任を負うことになります。集約ルートの状態が(他のプロセス/ユーザーによってIE)外部を変異させてしまうた後、それは佐賀に関与するが、前サガが失敗した場合に、アクションのコースがどうあるべきか

は、その集約ルートに補償コマンドを発行しますか?

つまり、特定の集約ルートのイベントストリーム(EventStore lingoで話す)の最後のではないイベントをどのように補正しようとしますか?

+2

私はあなたが補償アクションがまだ発生する可能性がありますかどうかを確認するには、イベントやAR自体の情報に頼ることができるどちらかと思います。そうでない場合は、紛争の手作業による解決を必要とするプロセスを開始するかもしれません。 – plalx

答えて

2

私が見ているところでは、あなたの補償措置を無効にして無効なAR で終わる可能性があるので、これはややこしい状況です。

あなたはおそらく、あなたのプロセスマネージャ(サガ)が完了することができることを確認するまでのARへの変更が行われていないようなプロセスの設計で再見する必要があるとしています。おそらく、後で変更するために値を一時的に保存する。

別のアプローチは、それがそれらのコマンドの問題につながる可能性があることを示し、特定の状態にする必要がありますあなたのAR上で特定のコマンドを防ぐためかもしれません。ユーザーは、これらのコマンドを発行することができなくなります。あなたのプロセスマネージャは、州と任意の州の有効期限/タイムアウトなどを世話するでしょう。

+0

お返事ありがとうございます。私はいくつかのコメントを持っている。最初に提案されたソリューションはロックのように見えますが、これはおそらくパフォーマンスの問題につながります。 2番目の提案では、ARがサガに参加することを知らないと仮定しています。これは、サガがオーケストレーションの詳細を知っていて、ARだけが呼び出されているという佐賀の原則に対する私の意見です。 – tdaliviu

+1

私は後で使用するための値を格納することはまったくロックに似ているとは思いません:)第2のオプション*は、サガが機能するようにするためだけに必要かもしれませんが、それが気になる場合は別の解決策が必要になるかもしれません。以前はプロセスマネジャーに限られていましたが、以前はプロセスマネージャーでかなりのデータを使用してきました。しかし、私が前に述べたように、これは難しい状況です。あなたの変更が安全に適用されることが確実になるまで、あなたの生きているARを明確にすることが最善です。 –

+0

私はこれにいくつかの考えを与えてきましたが、ARで「ステータス」を使用してプロセスマネージャを認識させるかどうかはわかりません。たとえば、「Order」を取ると、それは確かにライフサイクル*のステータスを持ちますが、ビジネスプロセスに関係しています。必ずしもプロセスマネジャーに関係しているわけではありませんが、ビジネスプロセスの何らかの形を確実に認識しています。 –

関連する問題