2017-05-24 10 views
0

お客様に注文承認を送信するメール通知サービスを開発したいと考えています。注文データは非正規化されたビュー(クエリ側)にあり、メールテンプレートに入力する必要があります。その後、メール通知サービスでhtml文字列形式でメールを送信します。ただし、注文ステータスは「注文承認メールが送信されました」に変更する必要があります。CQRSの非正規化ビューからのメール通知

また、マイクロサービスアーキテクチャでCQRS、ES、およびDDDの概念を実装しようとしています。 この手順は正しいですか?

  1. 注文ステータスをコマンド側で変更できるように、承認メールを送信するコマンドでHTTP POST APIを開発します。
  2. コマンド側がイベント「注文承認メールを処理しました」を生成します
  3. イベントプロセッサはイベントを処理します。クエリ側/非正規化ビューから注文データを取得する必要があります。
  4. イベントプロセッサは、データから承認メールを生成し、そのデータをテンプレートに記入します。
  5. ペイロードにメール本文(html形式)を含むメール通知サービスへのHTTP POSTコールを呼び出します。
  6. イベントプロセッサは、注文ステータスを「注文承認メール送信済み」に変更するために、注文サービス(コマンド側)にHTTP PUTを呼び出します。

しかし、この手順が適用された場合、ユーザーはリアルタイムで応答「送信済みメール」を取得することはできません。メールが正常に送信されたことをクライアント/フロントエンド側でトリガーするにはどうすればよいですか?したがって、クライアント側では、APIへの多くの呼び出しを更新または再試行する必要はありません。

ありがとうございました。

私はしばらく前にこのテーマに関する記事を書いた
+0

注文承認電子メールは人間の介入時に送信されますか?私。人間の司会者は電子メールを送信するUI上のブーンを押しますか?最初のイベント、つまり「注文承認メール処理済み」の必要性を確認できません。 –

+0

はい。人間が確認してボタンをクリックすると、承認メールが顧客に送信されます。 「注文承認メール処理済」イベントを作成する必要がない場合は、コマンド・サイドで注文ステータスを変更し、マテリアライズド・ビューから電子メールを生成するために問合せ側に移動するトリガーは何ですか?メールが正常に送信されたと判断するイベントは何ですか?この問題を処理するためのよりよい方法はありますか? – Benedict

+0

懸念事項を分けてください。ドメインの観点から、 'AnnounceCustomer'は' CustomerAnnounced'イベントを送出し、内部状態とビューを更新します。次に、Saga/Listenerは、インフラストラクチャまたは他の境界にあるコンテキストを含む電子メールを作成+送信します。インフラストラクチャ(メール送信者)は、MailSentやMailDeliveredイベントを送信して、uiや任意のビューに信号を送ることができます。私はコンピュータにいるときに答えを書くつもりです。 –

答えて

1

、あなたはここでそれを見つけることができます:How to Send Emails the Right Way in a CQRS System

ショートバージョンが、私はプロセス・マネージャを使用するだろうということです。プロセスマネージャーはイベントをリッスンし、これらのイベントの結果としてコマンドを発行することができます。イベントを再実行する場合は、メールを再送信しないようにしてください。

UIについて。私はこの質問に対処する別の記事を持っています。あなたはここにそれを見つけることができます:4 Ways to Handle Eventual Consistency on the UI

ここでは簡単な答えです。電子メールを送信するコードが実行された後、電子メールが送信されなかったとする頻度はどのくらいですか?合理的に堅牢なシステムを持っていると仮定すると、私はそれが動作する大部分の時間を望んでいます。だからそれを偽ってください。そして、問題がある場合にのみ、ユーザーや管理者に通知するための方法を見つけてください。ファンシーにしたいのなら、UIにメッセージを送るために、Signalrやpub-subフレームワークのようなものを使うことができます。

とにかく - 役立つことを望みます。

関連する問題