Azure函数cosmosdbtrigger(从开始选项开始)



i具有cosmos db触发器的Azure函数,该功能可以进行一些计算并将结果写入DB。如果出现问题,我想有可能从第一个项目或特定项目开始再次进行计算。是否可以?谢谢

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

现在,StartFromBeginning选项未暴露于Cosmos DB触发器。默认行为是从函数开始运行的那一刻开始接收更改,如果host/runtime关闭时间关闭,将生成租赁/检查点,因此当host/runtime备份时,将从最后一个检查点项目中拾取。

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

话虽如此,我们正在触发触发器上的几个新选项,并且有一个贡献者从事高级重试机制。

as @matias Quaranta和@pankaj Rawat在评论中说,接受答案是旧的,不再是真的。您可以在Azure函数的参数列表中使用startsfromthebeginning作为C#属性:

[FunctionName(nameof(MyAzureFunction))]
public async Task RunAsync([CosmosDBTrigger(
    databaseName: "myCosmosDbName",
    collectionName: "myCollectionName",
    ConnectionStringSetting = "cosmosConnectionString",
    LeaseCollectionName = "leases",
    CreateLeaseCollectionIfNotExists = true,
    MaxItemsPerInvocation = 1000,
    StartFromBeginning = true)]IReadOnlyList<Document> documents)
{
    ....
}

请更改接受的答案。

当前偏移(Cosmos DB Change Feed中的位置)由客户管理,在这种情况下为Azure函数运行时。

函数将偏移存储在租赁集合中(您的示例中称为leases)。

要重新从特定项目重新启动,您必须在某个时候在租赁收集中制作一张文档快照,然后在需要时将您当前的收藏品还原到该快照。

我不熟悉一种为您自动化的工具,除了使用Cosmos DB集合的通用工具外,

检查函数V2中可用的startFromBeginning选项。不幸的是,我仍在使用V1,无法验证。

设置时,它告诉触发器从集合的历史记录开头而不是当前时间开始读取更改。这仅在触发器启动时首次起作用,因为在后续运行中,检查点已经存储。当已经创建租赁没有效果时,将其设置为真。

最新更新