我有一个带cosmos db触发器的azure函数,它可以进行一些计算并将结果写入db。如果出现问题,我希望从第一个项目或特定项目开始再次进行计算。可能吗?感谢
public static void Run([CosmosDBTrigger(
databaseName: "db",
collectionName: "collection",
ConnectionStringSetting = "DocDbConnStr",
CreateLeaseCollectionIfNotExists = true,
LeaseCollectionName = "leases")]IReadOnlyList<Document> input, TraceWriter log)
{
...
}
答案 0 :(得分:3)
目前,directory = "../Detections/NAC20171125"
frames = [os.path.join(directory, str(f)) for f in range(10)]
# Start with a dataset of directory names.
dataset = tf.data.Dataset.from_tensor_slices(frames)
# Maps each subdirectory to the list of files in that subdirectory and flattens
# the result.
dataset = dataset.flat_map(lambda dir: tf.data.Dataset.list_files(dir + "/*"))
# Maps each filename to the parsed and resized image data.
dataset = dataset.map(parse_file)
dataset = dataset.batch(256)
iterator = dataset.make_initializable_iterator()
next_element = iterator.get_next()
选项未向Cosmos DB Trigger公开。默认行为是从函数开始运行时开始接收更改,如果主机/运行时关闭,将生成租约/检查点,因此当主机/运行时备份时,它将从最后一个检查点项目中获取。
触发器不会实现死字或错误处理,因为如果错误与批处理本身无关(例如,您处理文档和文件),它可能会生成同一批次的无限循环/意外计费/多次处理然后发送电子邮件并且电子邮件失败,整个批处理将被重新处理以发现与Feed本身无关的错误,因此我们建议用户在Function的代码中实现自己的try / catch或错误处理逻辑。它与事件中心触发器的方法相同。
话虽如此,我们正在揭露多个new options on the Trigger,并且有一位撰稿人致力于an advanced retrying mechanism。
答案 1 :(得分:1)
当前偏移量(Cosmos DB更改Feed中的位置)由客户端管理,在这种情况下为Azure Functions运行时。
函数将偏移量存储在租约集合中(在您的示例中称为leases
)。
要从特定项目重新启动,您必须在某个时刻在租约集合中创建文档的快照,然后在需要时将当前集合还原到该快照。
除了使用Cosmos DB集合的通用工具之外,我不熟悉为您自动化的工具。
答案 2 :(得分:1)
正如@Matias Quaranta和@Pankaj Rawat在评论中所说,接受的答案是旧的,不再是真实的。您可以将StartFromTheBeginning用作azure函数的参数列表中的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)
{
....
}
请更改接受的答案。
答案 3 :(得分:0)
Check startFromBeginning
选项在功能v2中可用。不幸的是,我仍在使用V1,无法验证。
设置后,它告诉触发器从集合历史的开始而不是当前时间开始读取更改。这仅在触发器首次启动时才起作用,因为在随后的运行中,检查点已经存储。当已创建租约时将其设置为true无效。