2

正確な答えが見つからない質問がいくつかあります。以前に CQRS を使用したことがありますが、適切に使用していなかった可能性があります。

ドメインに 5 つのサービスがあるとします: Gateway、Sales、Payments、Credit、Warehouse です。ユーザーがアプリケーションに登録するプロセス中に、フロントエンドがいくつかのコマンドを送信すると、同じフロントエンドが次のことを行います。ユーザーが登録されたら、他のいくつかのコマンドを送信して注文を作成し、クレジットを申請します。

さて、私が通常行っているのは、ゲートウェイを作成することです。このゲートウェイは、すべてのパブリック コマンドを受信し、検証され、有効な場合はドメイン コマンドに変換されます。イベントを使用してデータを保存するだけで、あるサービスが他のサービスで何らかのアクションを実行する必要がある場合は、ドメイン コマンドが一方のサービスから他方のサービスに直接送信されます。しかし、他のシステムでは、イベント ハンドラーがデータを保存する以上の目的で使用されているのを見てきました。私の質問は、イベント ハンドラーができることの制限は何ですか? また、特定のサービスが他のサービスがアクションを実行する必要がある場合にサービス間でコマンドを送信するのは正しいですか、それとも最初のイベントを発生させてイベントを発生させ、他のサービスのハンドラーにイベントハンドラーでそのアクションを実行させるのがより正しいですか. INeedCreditAproved、

任意の入力を歓迎します。

4

2 に答える 2

4

ここでは、Sagas (プロセス マネージャー) という重要な概念が欠落しています。長時間実行されるワークフローがあり、一元的に表現する方が適切です。

Sagas はイベントをリッスンし、コマンドを発行します。そのため、OrderAccepted イベントは Saga を開始し、ApproveCredit および ReserveStock コマンドを発行して、Credit サービスと Warehouse サービスにそれぞれ送信します。その後、Saga はコマンドの成功/失敗イベントをリッスンし、たとえば SendEmail コマンドなどを発行するなど、適切に補償することができます。

于 2012-09-19T23:52:12.780 に答える
0

1年前、私は「特定のサービスが他のサービスがアクションを実行することを必要とするときに、イベントハンドラーによってサービス間でコマンドを送信する」などのコマンドを送信していましたが、私が下した愚かな決定により、「最初のイベントを発生させるために」あなたが言ったようなイベントを使用することに切り替えましたおよびイベントを実行し、他のサービスのハンドラーにイベントハンドラーでそのアクションを実行させます」と最初は機能しました。私が下すことができる最も愚かな決定。ここで、イベント ハンドラーからコマンドを送信する方法に戻ります。

Rinat のような他の人がイベント ポート/受容体で同様のことを行っており、それが機能していることがわかります。

http://abdullin.com/journal/2012/7/22/bounded-context-is-a-team-working-together.html

http://abdullin.com/journal/2012/3/31/anatomy-of-distributed-system-a-la-lokad.html

幸運を

于 2012-09-19T19:51:08.987 に答える