有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

用于域事件存储和发布的java DDD体系结构

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

该框架将分两步设计,以便持久化域事件(稍后在需要时重构模型状态,或者我们在混合中添加报告系统)和发布基础设施

储存

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


共 (1) 个答案

  1. # 1 楼答案

    第一部分很好,因为您对事件和模型数据使用相同的数据库。因此,该事务跨越了一切

    不过,RabbitMQ中的重复事件可能会有问题。想想下面的例子:

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

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

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