以被动方式处理事务资源

时间:2015-09-30 18:20:01

标签: transactions akka distributed reactive-programming

我即将在金融领域开设一个新项目,其中全球和分布式交易目前统治世界,然而在反应世界中,事物在不同的线程和行动者中完成异步经典方法将无法工作。 这是一个例子。假设我们有IBM MQ消费者接收消息,这个人驻留在单独的actor中。我们还将每条消息传递给另一个执行某些业务逻辑的actor,或者将其存储在Oracle DB等其他事务数据源中。 现在,如果出现业务逻辑中的灾难或异常,我需要回滚MQ事务,因此在恢复后将再次轮询消息。 如何在被动世界中处理事务数据源?我正在寻找STM并且似乎它解决了问题,唯一的问题是我必须明确处理异常(通过在akka中监督)和回滚事务,如果有的话。但是,我可以看到违反反应式服务方式,MQ消费者行为必须等待(阻止?!),直到从另一个参与者(业务逻辑或其他事务数据源)收到异常或成功确认并提交或回滚MQ事务。是正确的理解还是我错过了什么? 感谢。

1 个答案:

答案 0 :(得分:0)

这是一个古老的问题,但我一直在思考它,并且我相信IBM MQ或Oracle还没有为此做好准备,因为它们缺少非阻塞API。

如果你在oracle中查看db transaction它与连接相关联,那么在“反应方式”中你需要把连接放在一边(没有提交),并且在某些时候接收一个告诉你提交或回滚的事件。虽然事件打算流得非常快,但最终会有大量的开放连接。连接很重,它可能会杀死你的数据库,其中一个连接= =数据库中的一个会话。 oracle中的会话非常繁重。 这同样适用于WebSphere MQ。我认为当你被迫使用像Oracle或MQ这样的技术时,反应就没有意义了。您可以加速应用程序,但通常在需要此类严格事务的业务应用程序中,您的瓶颈仍然存在于Oracle中。 好消息是Oracle正致力于非阻塞apis ......