相关疑难解决方法(0)

如何在DDD中管理域逻辑和事件之间的事务?

我正在研究DDD和事件源中的编程.

我看到一个例子,当调用域逻辑时(例如Order.placeOrder())它会发布一个事件(例如OrderPlaced).事件将作为事件存储发送到MQ.

域逻辑(Order.placeOrder())应该是一个原子API,@Transactional如果使用Spring作为事务管理器,它应该有注释.

现在我的问题是:

  1. 如何确保数据库更改和事件发送在同一个事务中?即如果在将数据提交到DB时出现任何错误,则该事件永远不应发送给MQ.

    我知道有像XA或2阶段提交这样的解决方案来强制DB更新并在同一事务中发送MQ消息.但似乎现在还没有广泛使用.

  2. 如果仍然使用Spring @Transactional注释而没有XA,那么在事务成功提交后我们可能会做一些逻辑吗?这样做的最佳做法是什么?

java spring domain-driven-design transactions event-handling

6
推荐指数
1
解决办法
1063
查看次数