【发布时间】:2014-09-12 06:08:11
【问题描述】:
我们在 Azure 辅助角色中运行 NServiceBus 4.6,使用 Azure 存储队列作为传输。
我们很高兴使用默认的 Azure 表存储持久化器存储 NServiceBus 相关数据(sagas、订阅等)。
但是,我们希望将业务实体存储在 RavenDB 中,以利用查询和 Raven 的其他功能。
鉴于 Azure 缺乏事务支持 - 在我们的处理程序中配置 NServiceBus 和使用 Raven 的 IDocumentStore / IDocumentSession 的最佳方式是什么。我们希望确保在发生异常时不会丢失任何数据。
我们应该:
使用NServiceBus的
IManageUnitsOfWork接口在Begin()中打开一个DocumentSession,然后在没有异常的情况下在End()中调用SaveChanges()。这就是我们过去对本地 NServiceBus 托管和 MSMQ 所做的事情,或者在我们的每个处理程序中打开一个新的
DocumentSession,并尽快显式调用SaveChanges()。这个选项需要确保我们所有的处理程序都是幂等的。在 RavenDB 中存储所有内容,包括业务实体和 NServiceBus 数据。这将避免 Azure 表存储,并希望以原子方式存储我们的数据。
推荐的配置是什么?还有什么需要考虑的吗?
【问题讨论】:
标签: c# azure ravendb nservicebus