Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Transactions 以反应式方式处理事务资源_Transactions_Akka_Distributed_Reactive Programming - Fatal编程技术网

Transactions 以反应式方式处理事务资源

Transactions 以反应式方式处理事务资源,transactions,akka,distributed,reactive-programming,Transactions,Akka,Distributed,Reactive Programming,我将在金融领域开始一个新的项目,在这个领域,全局和分布式事务目前占据着主导地位,然而在反应式世界中,事情是在不同的线程和参与者异步完成的,经典的方法是行不通的。 这里有一个例子。假设我们有IBM MQ消费者接收消息,这家伙驻留在单独的actor中。此外,我们还将每条消息传递给另一个执行某些业务逻辑的参与者,或者只将其存储在其他事务数据源(如Oracle DB)中。 现在,在业务逻辑中发生灾难或异常的情况下,我需要回滚MQ事务,以便在恢复后再次轮询消息。 在反应式世界中如何处理事务性数据源?我在看

我将在金融领域开始一个新的项目,在这个领域,全局和分布式事务目前占据着主导地位,然而在反应式世界中,事情是在不同的线程和参与者异步完成的,经典的方法是行不通的。 这里有一个例子。假设我们有IBM MQ消费者接收消息,这家伙驻留在单独的actor中。此外,我们还将每条消息传递给另一个执行某些业务逻辑的参与者,或者只将其存储在其他事务数据源(如Oracle DB)中。 现在,在业务逻辑中发生灾难或异常的情况下,我需要回滚MQ事务,以便在恢复后再次轮询消息。 在反应式世界中如何处理事务性数据源?我在看STM,它似乎解决了问题,唯一的问题是我必须显式地处理异常(通过在akka中进行监督)并在任何情况下回滚事务。然而,我可以看到违反反应式做事方式的情况,MQ使用者参与者必须等待(阻止?!),直到从另一个参与者(业务逻辑或其他事务数据源)收到异常或成功确认,然后提交或回滚MQ事务。是正确的理解还是我遗漏了什么?
谢谢。

您可以为此使用分布式事务协调器。在.NET中,TransactionScope会有所帮助。(ODP.NET和MSMQ支持transactionscope)。 您可能希望在工作单元设计模式中使用此概念


还可以看看这篇文章:

这是一个老问题,但我已经考虑了一段时间,我相信IBM MQ或Oracle还没有做好准备,因为它们缺少非阻塞API

若您查看oracle中的db事务,它与连接相关联,所以在“反应方式”中,您需要将连接放在一边(不提交),并在某个时刻接收到一个事件,告诉您提交或回滚。当事件打算以相当快的速度进行时,你最终会有很多开放的连接。连接很重,它可能会杀死您的数据库,其中一个连接==数据库中的一个会话。oracle中的会话相当繁重。 这同样适用于WebSphereMQ。我认为,当您被迫使用Oracle或MQ之类的技术时,采取被动的态度是没有意义的。您可以加快应用程序的速度,但通常在需要如此严格的事务处理的业务应用程序中,您的瓶颈将在于Oracle。 好消息是Oracle正在开发非阻塞API