【问题标题】:Send Akka messages with database update发送带有数据库更新的 Akka 消息
【发布时间】:2014-05-11 06:43:42
【问题描述】:

我正在尝试在 scala 中实现一个方法,该方法使用 Slick(在同一个数据库事务中)执行几个数据库更新,然后发送几个 akka 消息。发送消息和数据库更新都应该是原子的。在 JEE 世界中,JMS 和 DB(例如 JPA)参与同一个事务并由 JTA 协调,这几乎是透明的。我如何使用 Akka 和 Slick 实现它。示例将非常有益。

【问题讨论】:

  • 提交数据库事务后为什么不想发送消息?或者您是否需要在同一事务中执行一些数据库交互作为对该消息的反应?
  • 如果我未能发送任何 Akka 消息并返回错误,我需要能够回滚数据库事务。
  • Akka 不提供任何开箱即用的消息传递保证。可以做到(例如使用可靠的代理),但如果您需要这种行为,您可能更适合坚持使用 JaveEE。

标签: scala akka slick


【解决方案1】:

继续在 cmets 中讨论,我看到了您问题的解决方案:

从执行数据库交互的主要参与者开始。例如。在消息 Start 上,它使用 Slick 更新数据库并将 Connection 保存到演员的实例变量并将消息发送给子演员。该演员必须发送给您的主要演员确认,例如消息ConfirmTratnsaction。在对该消息的反应中,您对先前保存的Connection 执行提交并关闭它(或将其释放到池中)。此外,Main 演员必须监督该儿童演员。如果该actor在发送消息后失败(或发生超时),您必须通过保存的Connection回滚事务

【讨论】:

  • 感谢您的建议。看起来像一个非常复杂的解决方案,如果你有多个这样的地方,但有不同的演员/数据库,我们将在多个地方重新发明轮子。我希望有更简单的解决方案。
猜你喜欢
  • 1970-01-01
  • 2012-11-12
  • 1970-01-01
  • 1970-01-01
  • 2013-04-30
  • 2012-10-09
  • 2023-03-17
  • 2016-09-23
  • 2014-11-05
相关资源
最近更新 更多