Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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
NServiceBus传奇中使用了哪些事务?_Nservicebus_Nservicebus Sagas - Fatal编程技术网

NServiceBus传奇中使用了哪些事务?

NServiceBus传奇中使用了哪些事务?,nservicebus,nservicebus-sagas,Nservicebus,Nservicebus Sagas,我使用Azure表存储进行持久化,使用Azure服务总线进行传输,我想知道saga的处理程序中有哪些事务?它和普通的处理器一样吗 我这样问是因为我看到数据库更改(通常在环境事务中登记的SqlBulkCopy)多次发生。在这个场景中,我直接从Saga访问数据库,以“单线程”方式处理消息,但它似乎不起作用。Azure Service Bus transport仅支持以下级别 SendsAtomicWithReceive(默认) 仅接收 没有 它不支持事务作用域级别。这就是你要找的 这是为什么?Azu

我使用Azure表存储进行持久化,使用Azure服务总线进行传输,我想知道saga的处理程序中有哪些事务?它和普通的处理器一样吗


我这样问是因为我看到数据库更改(通常在环境事务中登记的SqlBulkCopy)多次发生。在这个场景中,我直接从Saga访问数据库,以“单线程”方式处理消息,但它似乎不起作用。

Azure Service Bus transport仅支持以下级别

  • SendsAtomicWithReceive(默认)
  • 仅接收
  • 没有
  • 它不支持事务作用域级别。这就是你要找的


    这是为什么?Azure服务总线不允许任何环境事务发生。任何与业务相关的数据操作都将从处理程序事务中排除。为了避免重复的业务数据写入,您需要实现幂等性,以确保在重试消息时不会多次写入相同的业务数据。

    谢谢。我的印象是,正常的处理程序确实包含一个事务,因为当它们失败时,数据库更改将回滚。或者我遗漏了一个要点:)没错,处理程序参与为端点定义的事务级别。级别取决于底层传输的能力。如果您碰巧使用MSMQ或SQL Server传输,则业务数据操作可以与传输参与同一事务。ASB、ASQ、ASQ和RabbitMQ的情况并非如此。但是,如果我正在使用一个不支持事务的传输,那么处理程序是否仍然使用一个独立于传输事务的事务?如果答案是肯定的,那么在一个传奇中处理程序的行为是相同的吗?处理程序是端点设置的事务级别的主体,这取决于所使用的传输。例如,使用ASB传输,您可以在处理程序中拥有自己的事务,但它将是无关的,并且完全特定于用户。独立处理程序和Sagas处理程序都遵循这一点。顺便说一句,不建议在Saga处理程序中执行任何工作。相反,您应该向独立处理程序发送工作请求。非常感谢。真的帮我解决了一些问题!