0

アプリケーションのドメイン イベント フレームワークを実装しています。以下は同じ疑似コードです。明らかな注意事項があるかどうかを知りたいです。

フレームワークは、ドメイン イベント (必要に応じて後でモデルの状態を再構築するため、またはミックスにレポート システムを追加するため) とパブリッシング インフラストラクチャを永続化するための 2 ステップで設計されます。

保管

begin txn
update model
Domaineventpublsisher.publish(event)
events serialized and stored to the persistence store by the Domaineventpublisher
commit txn

出版

timer triggers and the registered event dispatchers are notified
event dispatcher reads from of db unsent events
begin txn
the unsent events are published thro rabbitmq and persistence is updated with the last dispatched event
commit txn

これは、少しの調査に基づいて思いついた最も単純なものであり、何も見落としたくありませんでした.

持続性は接続プールされた Postgres になり、前述のように RabbitMQ はメッセージング インフラになります。

4

1 に答える 1

1

イベントとモデル データに同じ DB を使用しているため、最初の部分は問題ありません。したがって、トランザクションはすべてにまたがります。

ただし、RabbitMQ でイベントが重複するという問題が発生する可能性があります。次のケースを考えてください。

  1. アプリがイベントを RabbitMQ に発行します。
  2. RabbitMQ はイベントを正しく受け取ります。
  3. ローカル永続性の更新中に、アプリがクラッシュします。

その結果、復旧後に同じイベントを再度 RabbitMQ に送信することになります。これにより、RabbitMQ でイベントが効果的に複製されます。

通常、この問題は、一意のイベント ID を設定したり、受信側で重複除外を実行したりすることで軽減できます。また、 RabbitMQ 信頼性ガイドもお読みください。

于 2015-11-09T11:33:53.647 に答える