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