イベント ストアではなく、CQRS リポジトリがイベントを発行するのはなぜですか? で学んだように。イベントを発行するのは、CQRS リポジトリのタスクです。ここまでは順調ですね。
もちろん、イベントの保存と発行は、1 つのトランザクション内で行う必要があります。技術的には、これは 1 つ (または複数) のレコードをストアに書き込み、1 つ (または複数) のイベントをメッセージ バスに発行することを意味します。したがって、単純なデータベース トランザクションでは十分ではなく、分散トランザクションにする必要があります。
現在、残念ながら、多くの NoSQL データベース (MongoDB など) は ACID 準拠のトランザクションをサポートしておらず、分散トランザクションで発生する可能性についても言及していません。さらに、分散トランザクションをサポートしていないメッセージ キューもあります。
問題は、これにどう対処するかです。
使用する推奨パターンはありますか?