如何将Azure Service Bus事务性地用于Azure DocumentDB

如何将Azure Service Bus事务性地用于Azure DocumentDB,azure,transactions,azureservicebus,azure-cosmosdb,Azure,Transactions,Azureservicebus,Azure Cosmosdb,我希望能够在DocumentDB中保存/更新一个文档,然后在Azure服务总线上发布一个事件,并且我希望这些能够原子化地发生 Azure Service Bus不支持分布式事务,因此使用SQL数据库,我保存记录并将记录放在消息队列表中,所有这些都在SQL事务中。然后,流程读取消息队列表,将消息放在队列上,并在成功时将其从队列中删除(如果消息添加两次,则使用Service Bus的重复数据消除) 但DocumentDB不支持跨集合的事务,因此我无法更新文档,然后将文档添加到消息队列集合中 我怎样才

我希望能够在DocumentDB中保存/更新一个文档,然后在Azure服务总线上发布一个事件,并且我希望这些能够原子化地发生

Azure Service Bus不支持分布式事务,因此使用SQL数据库,我保存记录并将记录放在消息队列表中,所有这些都在SQL事务中。然后,流程读取消息队列表,将消息放在队列上,并在成功时将其从队列中删除(如果消息添加两次,则使用Service Bus的重复数据消除)

但DocumentDB不支持跨集合的事务,因此我无法更新文档,然后将文档添加到消息队列集合中


我怎样才能确保我对文档所做的更改能够发布到总线上?

我不完全确定我是否理解这个问题,但是。。。从事务的角度来看,您可以将数据和队列文档都放在同一个集合中(只需确保您具有某种类型的区分符,例如用于筛选的
type
属性)

编辑-反映触发器和事务


此外,DocumentDB支持预触发和后触发操作,因此您可以设置后触发,以便在数据文档插入完成后编写其他文档。如评论中所述(per@Ryan):触发后操作包括在事务中。

Paul,您在哪里看到关于如何使用DocumentDB集合作为消息队列的文档?如果这允许您配置筛选器参数,那么您可以在同一集合中对消息进行排队。或者,如果您认为可以使用其他机制从DocumentDB集合中提取文档并将其推送到总线上,那么您完全可以编写代码来查找特定类型的文档。我自己对这个话题很感兴趣。我一直在使用DocumentDB实现我自己的队列和主题,但我希望有一个真正的服务总线。到2019年,cosmosdb不支持在同一事务中添加和更新文档,除非您使用存储过程(即使这样,它们也需要在同一分区中)。您是否使用存储过程来执行这些操作?是的,与其他文档数据库不同,在其他文档数据库中,集合与关系表更为同义,我在DocumentDB中发现它与数据库更为同义;触发器操作将在与原始上下文写入相同的事务中发生。如果内容未写入,(post)触发器将不会触发。如果post触发器失败,DocmentDB将回滚原始写入操作。@RyanCrawCour MSFT-谢谢!将编辑答案以反映。