问题描述
我正在调查ChangeFeedProcessorBuilder processor1
的行为,该行为在处理特定更改时引发异常或故障。恢复后,将不再提取相同的更改。只有在成功处理通知之后,有什么方法可以检查点?
代表如下:
var builder = container.GetChangeFeedProcessorBuilder("migrationProcessor",(IReadOnlyCollection<object> input,CancellationToken cancellationToken) =>
{
Console.WriteLine(input.Count + " Changes Received by " + a);
// just first try will fail (static variable)
if (a++ == 0)
{
throw new Exception();
}
return Task.CompletedTask;
});
谢谢!
解决方法
更改供稿处理器的默认行为是在成功执行委托后检查点:https://docs.microsoft.com/azure/cosmos-db/change-feed-processor#processing-life-cycle
主机实例的正常生命周期为:
- 阅读更改提要。
- 如果没有更改,请睡眠一段预定的时间(可通过Builder中的WithPollInterval进行自定义),然后转到#1。
- 如有更改,请将其发送给委托人。
- 当代表成功完成更改处理后,以最新的处理时间点更新租赁商店,然后转到#1。
如果您的委托处理程序抛出未处理的异常,则没有检查点。
从注释中添加:唯一可能不重试该批处理的情况是,如果抛出的批处理是有史以来第一个(租约没有“续期”)。因为当主机再次选择要重新处理的租约时,它没有时间重试。根据官方文档,一个租约由一个实例拥有,因此,其他实例不可能选择相同的租约并在同一Deployment Unit上下文中并行处理。 >