Transactions NServiceBus“发送原子并接收”仍需要发件箱来进行消息重复数据消除?

Transactions NServiceBus“发送原子并接收”仍需要发件箱来进行消息重复数据消除?,transactions,nservicebus,Transactions,Nservicebus,使用sends atomic with receive的传输事务模式可以避免在传入消息命令或事件的处理程序因某种原因失败时在处理程序中发送消息。NServiceBus的发件箱功能可避免多次处理同一传入消息,从而避免编写幂等处理程序。我的问题是:一个是否消除了对另一个的需求?是的,当将sends atomic与receive一起使用时,使用发件箱来确保传入消息的重复数据消除是否仍然有用?将sends atomic与receive一起使用可确保对重影消息没有实际机会,并且仅适用于传输 在这种模式下,

使用sends atomic with receive的传输事务模式可以避免在传入消息命令或事件的处理程序因某种原因失败时在处理程序中发送消息。NServiceBus的发件箱功能可避免多次处理同一传入消息,从而避免编写幂等处理程序。我的问题是:一个是否消除了对另一个的需求?是的,当将sends atomic与receive一起使用时,使用发件箱来确保传入消息的重复数据消除是否仍然有用?

将sends atomic与receive一起使用可确保对重影消息没有实际机会,并且仅适用于传输

在这种模式下,消息仍可能被多次处理

如果消息处理成功,那么现在传输提交了它的事务,但失败了。现在将再次处理您的消息,以便再次更改数据库,但不会发送任何重影消息

如果要防止再次进行数据库更改,如果更改不是幂等的,则仍然需要发件箱

还请注意,发件箱只执行事务性的精确一次处理,不执行重复数据消除,但由于事务性处理,只有一个事务可以插入已处理消息的唯一消息标识,从而间接导致类似重复数据消除的行为

如果您的资源不是事务性的,那么仍然需要使消息处理幂等。如果要访问的资源与发件箱使用的存储上下文不同,并且不允许或不支持这些存储资源之间的分布式事务,则仍然需要执行此操作

文件: