Azure函数CosmosDbTrigger(从头开始选项)

Azure函数CosmosDbTrigger(从头开始选项),azure,azure-cosmosdb,azure-functions,Azure,Azure Cosmosdb,Azure Functions,我有一个带有cosmos db触发器的azure函数,它可以进行一些计算并将结果写入db。如果出现问题,我希望能够从第一项或特定项开始重新计算。可能吗?谢谢 public static void Run([CosmosDBTrigger( databaseName: "db", collectionName: "collection", ConnectionStringSetting = "DocDbConnStr", Create

我有一个带有cosmos db触发器的azure函数,它可以进行一些计算并将结果写入db。如果出现问题,我希望能够从第一项或特定项开始重新计算。可能吗?谢谢

public static void Run([CosmosDBTrigger(
        databaseName: "db",
        collectionName: "collection",
        ConnectionStringSetting = "DocDbConnStr",
        CreateLeaseCollectionIfNotExists = true,
        LeaseCollectionName = "leases")]IReadOnlyList<Document> input, TraceWriter log)
    {

        ...
    }
公共静态无效运行([CosmosDBTrigger(
数据库名称:“db”,
collectionName:“集合”,
ConnectionStringSetting=“DocDbConnStr”,
CreateLeaseCollectionIfNotExists=true,
LeaseCollectionName=“leases”)]IReadOnlyList输入,TraceWriter日志)
{
...
}
当前偏移量(Cosmos DB change feed中的位置)由客户端管理,本例中为Azure函数运行时

函数将偏移存储在租约集合中(在您的示例中称为
租约

若要从特定项重新启动,您必须在某个时间点创建租约集合中文档的快照,然后在需要时将当前集合还原到该快照


除了使用Cosmos DB collections的通用工具之外,我不熟悉为您实现自动化的工具。

目前,
startFromBeging
选项未暴露于Cosmos DB触发器。默认行为是从函数开始运行时开始接收更改,如果主机/运行时关闭,将生成租约/检查点,因此当主机/运行时备份时,它将从最后一个检查点项中拾取

触发器不执行死信或错误处理,因为如果错误与批本身无关,它可能会生成同一批的无限循环/意外计费/多次处理(例如,您处理文档,然后发送电子邮件,但电子邮件失败,整个批处理将因与提要本身无关的错误而重新处理),因此我们建议用户在函数代码中实现自己的尝试/捕获或错误处理逻辑。这与事件中心触发器的方法相同

也就是说,我们正在公开几个,有一个贡献者正在处理。

startfrombeging
选项在函数v2中可用。不幸的是,我仍在使用V1,无法验证

设置时,它会告诉触发器从集合历史记录的开始而不是当前时间开始读取更改。这仅在触发器第一次启动时有效,就像在后续运行中一样,检查点已经存储。如果已创建租约,则将此设置为true无效


正如@Matias Quaranta和@Pankaj Rawat在评论中所说,接受答案是旧的,不再正确。您可以在azure函数的参数列表中用作C#属性,如下所示:

[FunctionName(nameof(MyAzureFunction))]
公共异步任务RunAsync([CosmosDBTrigger(
数据库名称:“myCosmosDbName”,
collectionName:“myCollectionName”,
ConnectionStringSetting=“cosmosConnectionString”,
LeaseCollectionName=“租赁”,
CreateLeaseCollectionIfNotExists=true,
MaxItemsPerInvocation=1000,
startFromStart=true)]IReadOnlyList(文档)
{
....
}

请更改已接受的答案。

首先感谢您的评论。不,对不起。首先我删除了租约中的文档,然后更改了租约名称。这两种方法都不起作用。删除租约不会使函数从头开始运行。如果没有租约,函数从开始运行(现在)开始接收更改.在我的例子中,我使用CosmosTrigger函数同步Cosmos和Redis缓存,当我们必须清除和重建Redis缓存时,我编写了WebJob。有没有更好的建议?这个答案很旧,
startFromBeging
此时存在,您可以使用它。请参阅是,它仅在V2中可用。