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

第一部分很好,因为您对事件和模型数据使用相同的数据库。因此,交易涵盖一切。

不过,您可能对 RabbitMQ 中的重复事件有疑问。考虑以下情况:

  1. 您的应用程序将事件发布到 RabbitMQ。
  2. RabbitMQ 正确接收事件。
  3. 在更新本地持久性期间,您的应用程序崩溃。

因此,您将在恢复后再次向 RabbitMQ 发送相同的事件。这有效地复制了 RabbitMQ 中的事件。

这个问题通常可以通过拥有唯一的事件 ID 和/或在接收方执行重复数据删除来缓解。您可能还想阅读RabbitMQ 可靠性指南

于 2015-11-09T11:33:53.647 回答