2

イベント ドリブン アーキテクチャで相関イベントを処理する方法は? 具体的には、何らかのアクションを実行するために複数のイベントをトリガーする必要がある場合はどうでしょうか。たとえば、2 つのイベントをリッスンし、両方のイベントが到着して同じ相関 ID を持つ場合にのみアクションを実行するマイクロサービスがfooありbarます。

1 つの方法は、簿記を行うマイクロサービス内に内部データ構造を保持し、すべてが満たされると適切なアクションがトリガーされることです。ただし、このアプローチの問題は、マイクロサービスが不変でなくなることです。

より良いアプローチはありますか?

4

2 に答える 2

5

古典的な例は、販売時に注文が入り、イベントが発行される場合です。Finance と Shipping の両方がイベントにサブスクライブされますが、Shipping も Finance からのイベントにサブスクライブされます。

すべてのイベントが到着するのを待っています

面白いのは、メッセージが到着する順序がわからないことです。データベースがオフラインであるため、販売からのイベントによって技術的なエラーが発生する可能性があります。再度キューに入れられるか、操作が再試行するためにエラー キューに入る可能性があります。その間に、財務からのイベントが到着する可能性があります。したがって、理論的には、販売からのイベントが最初に到着し、次に金融イベントが到着するはずですが、実際にはその逆になる可能性があります。

ここには多くの解決策がありますが、グラフィカルなものは好きではありません。.NET 開発者として、これまで K2 と Windows Workflow Foundation を使用してきましたが、最も柔軟なソリューションは、グラフィカル インターフェイスではなくコードで作成されます。

現在、これには NServiceBus または MassTransit を使用します。ちなみに、私は現在 Particular Software で働いており、NServiceBus を作成しています。NServiceBus には、この種の作業 (ドキュメント) 用の Sagas があります。GitHub のコード。

この用語sagaは一種の負荷がかかりますが、基本的には長時間実行される (ビジネス) プロセスを扱います。Gregor Hohpe はこれをProcess Manager(リンク) と呼んでいます。

サガが行うことを要約すると、受信メッセージによってインスタンス化され、状態があります。customer id着信メッセージは、またはなどのcorrelationid に基づいて、特定の saga インスタンスにバインド/ディスパッチされますorder id。メッセージ (イベント) が処理されると、新しいメッセージが到着するまで、またはコードがサガを完了としてマークし、状態がストレージから削除されるまで、状態が保存されます。

前述のように、.NET の世界では MassTransit と NServiceBus がこれをサポートしていますが、他の環境にはおそらく代替手段があります。

于 2016-06-02T07:03:30.050 に答える
2

私が正しく理解していれば、まさにそれを行うws02 cepや other のような CEP (複合イベント プロセッサ) が必要なようです。cep は、特定の条件が満たされたときにイベントを集約してアクションを実行できます。

于 2016-06-01T16:23:39.283 に答える