交互式微服务时的事务

时间:2016-02-01 16:50:41

标签: java hibernate transactions akka microservices

我正在寻找最佳方法来保持数据的一致性,同时在项目中的微服务之间进行相互通信。

使用Jersey + Guice构建的项目,并使用Akka在整个系统中粘合服务。我通过调用另一个服务使用单独的事务来避免长时间运行的事务。我使用Hibernate作为ORM和Postgres作为DB。 流程如下:

  1. 开始交易
  2. 做一些工作
  3. 提交交易
  4. 使用Akka拨打其他服务,接收或发送一些数据
  5. 开始交易
  6. 做剩下的工作
  7. 提交交易
  8. 因此,如果步骤4失败,我的数据将变为非一致状态。我花了几个小时找到解决方案以避免它,但我失败了。有没有正确的方法让它保持一致状态?

2 个答案:

答案 0 :(得分:0)

好吧,如果你想避免长时间运行的事务,但希望它们仍然(可能)长时间运行它们的逻辑等价物,那么你实际上是将“事务”抽象推送到应用程序级别。

最简单的解决方案是接受它并为您的数据创建一些列,指示记录是脏的,然后在步骤(6)中使它们变为非脏。

答案 1 :(得分:0)

微服务传奇在这里可能会有所帮助。有关Sagas

的更多详情