アーキテクチャモデル:トレーディング送信トレイ
言及されながら
アプリケーションイベント(システムイベント)
コンテキスト
serviceコマンドは通常、データベースを更新し、メッセージ/イベントを送信する必要があります。例えば、サービスのサガはアトミックデータベースを更新し、メッセージ/イベントを送信する必要が関与しました。同様に、発行ドメインのイベントサービスは、アトミック集約更新され、イベントを解放する必要があります。データベースの更新メッセージを送信しなければならないとの原子は、データの不整合やエラーを回避します。しかし、アトミックデータベースを更新し、メッセージ/イベントを公開する分散トランザクション間でデータベースやメッセージング剤の使用は現実的ではありません。
問題
どのように信頼性の高い/アトミックデータベースを更新し、メッセージ/イベントをパブリッシュ?
フォーカス
- あなたは2PCを選択することはできません
結論
ローカルトランザクションが送信トレイテーブルに挿入されるサービスメッセージ/イベントを使用して、リレーショナル・データベースの一部分(例えば、MESSAGE)です。(ドキュメントやプロジェクトなど)が更新されたレコードのプロパティにメッセージ/イベントを追加するために、サービスのNoSQLデータベースを使用してください。メッセージ中継別のプロセスは、メッセージ・ブローカーにポストされたイベントのデータベースに挿入されます。
結果のコンテキスト
このモデルは、次の利点があります。
- シニアフィールドサービスリリースイベント
- あなたは2PCを選択することはできません
このモデルは、次のような欠点があります。
- 開発者はデータベース/イベントを更新した後にメッセージを投稿することを忘れかもしれませんので、誤りを生じやすいかもしれません。
また、このモデルでは、次のような問題があります。
- メッセージリレーは、いくつかのメッセージを発行することができます。例えば、それはニュースの後に解放されてもよいが、それはクラッシュ前にレコードにそうしました。あなたが再起動すると、再びメッセージを解放します。これにより、ユーザは、メッセージがすでに処理した追跡することによって、メッセージIDであってもよい冪等しなければなりません。幸いなことに、起因する(メッセージブローカがメッセージを複数回提供することができますので)通常冪等する必要があるメッセージのユーザーには、これは通常は問題ではありません。
関連パターン
- 佐賀とドメインのイベントモデルは、このモデルの需要が作成されます。
- イベントトレーサビリティは、別のソリューションです
- メッセージリレーの実装は2つのモードがあります。
- トランザクションログの末尾のモード
- ポーリングモードによって掲示されます