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

时间:2014-09-12 06:08:11

标签: c# azure ravendb nservicebus

我们使用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表存储,并希望以原子方式存储我们的数据。

建议的配置是什么,还有什么我们需要考虑的吗?

1 个答案:

答案 0 :(得分:0)

我建议稍微更改选项#1 - 您需要在Azure中使用RavenHQ或您自己的RavenDB设置。选项#3听起来太复杂和不必要了。 NServiceBus数据已由传输处理(通过利用存储表)。 This documentation接近您想要做的事情。