gpt4 book ai didi

java - DDD - 领域事件存储和发布的架构

转载 作者:行者123 更新时间:2023-12-01 10:56:31 25 4
gpt4 key购买 nike

我正在为我们的应用程序实现域事件框架,下面是相同的伪代码,想知道是否有任何明显的警告

该框架的设计分为两步,以便持久保存域事件(在需要时重建模型状态,或者我们添加一个报告系统)和发布基础设施

存储

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 将是消息传递基础设施。

最佳答案

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

不过,您可能会遇到 RabbitMQ 中重复事件的问题。考虑以下情况:

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

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

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

关于java - DDD - 领域事件存储和发布的架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33594988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com