Cosmos DB ChangeFeed异常处理

时间:2017-10-08 22:02:07

标签: azure-cosmosdb

使用Cosmos DB ChangeFeed,有人可以提供一些异常处理方面的帮助吗? 假设我在更改源中有10个文档,我有一个循环来逐个遍历文档。假设在处理完第5个文档后发生异常。 改变饲料将会发生什么? 到目前为止,我认为整个更改过程被吞下,即异常后的其余文件都消失了。

我只是想知道这是什么回退策略?有没有办法可以完全退出整个批次,所以我不会遗漏任何变化。

2 个答案:

答案 0 :(得分:1)

这是一个老问题,但希望其他人可能会发现它很有用。

要处理错误,建议的模式是使用try-catch包装代码。捕获错误并将该文档放入队列(死信)。有一个单独的程序来处理那些产生错误的文档。这样,如果您有100个文档批处理,并且只有一个文档失败,则不必丢弃整个批处理。

第二个原因是,如果您可以继续从Change Feed获取这些文档,那么您可能会丢失文档的最后一个快照。更改Feed仅保留文档的最后一个版本,在其他进程之间可以更改文档。

在您不断修复代码时,很快就会发现死信队列中没有文档。

更改Feed系统会自动调用Azure功能。如果您想回滚更改Feed并控制它的每个方面,您应该考虑使用Change processor Feed SDK

答案 1 :(得分:0)

MS的建议,在您的CosmosDB触发函数中添加try-catch。如果有任何文档抛出异常,则必须将其存储在适当的位置。

一旦您将开始将失败的消息存储在某个位置,则必须建立指标,警报和重新处理策略。

下面是我处理这种情况的策略。 My One函数列出了数据库changefeed并将数据推入“主题”(没有任何过程)。我创建了多个订阅,因此每个订阅都维护自己的死信队列。

enter image description here