我们使用Azure存储队列作为传输在Azure辅助角色中运行NServiceBus 4.6。
我们很高兴使用默认的Azure表存储容器来存储NServiceBus相关数据(sagas,订阅等)。
但是,我们希望将我们的业务实体存储在RavenDB中,以利用查询和Raven的其他功能。
鉴于Azure缺乏事务支持 - 在我们的处理程序中配置NServiceBus和使用Raven的IDocumentStore
/ IDocumentSession
的最佳方法是什么。我们希望确保在发生异常时不会丢失任何数据。
我们应该:
使用NServiceBus的IManageUnitsOfWork
界面在DocumentSession
中打开Begin()
,如果没有,请在SaveChanges()
中致电End()
例外。这是我们以前用于内部部署的NServiceBus托管和MSMQ,或
在每个处理程序中打开一个新的DocumentSession
,并尽快显式调用SaveChanges()
。此选项需要确保我们的所有处理程序都是幂等的。
将所有内容存储在RavenDB中,包括业务实体和NServiceBus数据。这样可以避免Azure表存储,并希望以原子方式存储我们的数据。
建议的配置是什么,还有什么我们需要考虑的吗?
答案 0 :(得分:0)
我建议稍微更改选项#1 - 您需要在Azure中使用RavenHQ或您自己的RavenDB设置。选项#3听起来太复杂和不必要了。 NServiceBus数据已由传输处理(通过利用存储表)。 This documentation接近您想要做的事情。