将RavenDB与NServiceBus Azure一起使用的正确方法
本文关键字:方法 一起 RavenDB NServiceBus Azure | 更新日期: 2023-09-27 18:21:32
我们使用Azure存储队列作为传输,在Azure工作角色中运行NServiceBus 4.6。
我们很乐意使用默认的Azure表存储持久器存储NServiceBus相关数据(sagas、订阅等)。
然而,我们希望将我们的业务实体存储在RavenDB中,以利用查询和Raven的其他功能。
鉴于Azure缺乏事务支持,配置NServiceBus并在我们的处理程序中使用Raven的IDocumentStore
/IDocumentSession
的最佳方式是什么。我们希望确保在发生异常时不会丢失任何数据。
我们应该:
-
使用NServiceBus的
IManageUnitsOfWork
接口在Begin()
中打开一个DocumentSession
,如果没有异常,则在End()
中调用SaveChanges()
。这是我们过去对内部部署NServiceBus主机和MSMQ(或)所做的操作 -
在我们的每个处理程序中打开一个新的
DocumentSession
,并尽快显式调用SaveChanges()
。这个选项需要确保我们所有的处理程序都是幂等的。 -
将所有内容存储在RavenDB中,包括业务实体和NServiceBus数据。这将避免Azure表存储,并有望原子化地存储我们的数据。
推荐的配置是什么?我们还需要考虑其他什么吗?
我建议选择选项#1,稍作更改-您需要在Azure中使用RavenHQ或您自己的RavenDB设置,这是高度可用的。选项#3听起来过于复杂和不必要。NServiceBus数据已经由传输(通过利用存储表)处理。此文档接近您想要做的。