将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表存储,并有望原子化地存储我们的数据。

推荐的配置是什么?我们还需要考虑其他什么吗?

将RavenDB与NServiceBus Azure一起使用的正确方法

我建议选择选项#1,稍作更改-您需要在Azure中使用RavenHQ或您自己的RavenDB设置,这是高度可用的。选项#3听起来过于复杂和不必要。NServiceBus数据已经由传输(通过利用存储表)处理。此文档接近您想要做的。