お客様に注文承認を送信するメール通知サービスを開発したいと考えています。注文データは非正規化されたビュー(クエリ側)にあり、メールテンプレートに入力する必要があります。その後、メール通知サービスでhtml文字列形式でメールを送信します。ただし、注文ステータスは「注文承認メールが送信されました」に変更する必要があります。CQRSの非正規化ビューからのメール通知
また、マイクロサービスアーキテクチャでCQRS、ES、およびDDDの概念を実装しようとしています。 この手順は正しいですか?
- 注文ステータスをコマンド側で変更できるように、承認メールを送信するコマンドでHTTP POST APIを開発します。
- コマンド側がイベント「注文承認メールを処理しました」を生成します
- イベントプロセッサはイベントを処理します。クエリ側/非正規化ビューから注文データを取得する必要があります。
- イベントプロセッサは、データから承認メールを生成し、そのデータをテンプレートに記入します。
- ペイロードにメール本文(html形式)を含むメール通知サービスへのHTTP POSTコールを呼び出します。
- イベントプロセッサは、注文ステータスを「注文承認メール送信済み」に変更するために、注文サービス(コマンド側)にHTTP PUTを呼び出します。
しかし、この手順が適用された場合、ユーザーはリアルタイムで応答「送信済みメール」を取得することはできません。メールが正常に送信されたことをクライアント/フロントエンド側でトリガーするにはどうすればよいですか?したがって、クライアント側では、APIへの多くの呼び出しを更新または再試行する必要はありません。
ありがとうございました。
私はしばらく前にこのテーマに関する記事を書いた
注文承認電子メールは人間の介入時に送信されますか?私。人間の司会者は電子メールを送信するUI上のブーンを押しますか?最初のイベント、つまり「注文承認メール処理済み」の必要性を確認できません。 –
はい。人間が確認してボタンをクリックすると、承認メールが顧客に送信されます。 「注文承認メール処理済」イベントを作成する必要がない場合は、コマンド・サイドで注文ステータスを変更し、マテリアライズド・ビューから電子メールを生成するために問合せ側に移動するトリガーは何ですか?メールが正常に送信されたと判断するイベントは何ですか?この問題を処理するためのよりよい方法はありますか? – Benedict
懸念事項を分けてください。ドメインの観点から、 'AnnounceCustomer'は' CustomerAnnounced'イベントを送出し、内部状態とビューを更新します。次に、Saga/Listenerは、インフラストラクチャまたは他の境界にあるコンテキストを含む電子メールを作成+送信します。インフラストラクチャ(メール送信者)は、MailSentやMailDeliveredイベントを送信して、uiや任意のビューに信号を送ることができます。私はコンピュータにいるときに答えを書くつもりです。 –