私は基本的に、CQRSの概念と関連する概念に頭を包み込もうとしています。
CQRSには必ずしもメッセージングとイベントソーシングが組み込まれているわけではありませんが、適切な組み合わせのようです(これらの概念を組み合わせた多くの例/ブログ投稿でわかるように)
何かの状態変更のユースケース(SOに関する質問を更新するなど)が与えられた場合、次のフローが正しいと考えますか(ベストプラクティスとして)。
システムは、いくつかの小さなコマンドに分割される可能性のある集約UpdateQuestionCommandを発行します。質問集約ルートをターゲットとするUpdateQuestion、およびユーザー集約ルートをターゲットとするUpdateUserAction(ポイントをカウントするなど)。これらは、ポイントツーポイントメッセージングを使用して非同期的に送信されます。
集約ルートはそれぞれの処理を実行し、すべてがうまくいけば、QuestionUpdatedイベントとUserActionUpdatedイベントをそれぞれ起動します。これらのイベントには、イベントストアに外部委託された状態が含まれます。
これらのイベントは、ブロードキャスト用のpub / subキューにも置かれます。サブスクライバー(読み取りビューを作成する1つまたは複数のプロジェクターの可能性が高い)は、これらのイベントを無料でサブスクライブできます。
一般的な質問:コマンドはPoint-to-Pointで通信される(つまり、受信者が既知である)のに対して、イベントはブロードキャストされる(つまり、受信者が不明である)ことは本当にベストプラクティスですか?
上記を仮定すると、ポイントツーポイントではなくpub / subを介してコマンドをブロードキャストすることの利点/欠点は何でしょうか?
例:佐賀はどの集約ルートが最初に参加するのかわからないため、集約ルートの1つに障害が発生した場合に佐賀が果たす必要がある調停の役割が妨げられるため、佐賀の使用中にコマンドをブロードキャストすることが問題になる可能性があります。
一方、コマンドのブロードキャストが許可されると、利点(柔軟性)が得られます。