处理不成功后的ChangeFeedProcessorBuilder检查点

问题描述

我正在调查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

主机实例的正常生命周期为:

  1. 阅读更改提要。
  2. 如果没有更改,请睡眠一段预定的时间(可通过Builder中的WithPollInterval进行自定义),然后转到#1。
  3. 如有更改,请将其发送给委托人。
  4. 当代表成功完成更改处理后,以最新的处理时间点更新租赁商店,然后转到#1。

如果您的委托处理程序抛出未处理的异常,则没有检查点。

从注释中添加:唯一可能不重试该批处理的情况是,如果抛出的批处理是有史以来第一个(租约没有“续期”)。因为当主机再次选择要重新处理的租约时,它没有时间重试。根据官方文档,一个租约由一个实例拥有,因此,其他实例不可能选择相同的租约并在同一Deployment Unit上下文中并行处理。 >