0

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

谢谢!

4

1 回答 1

1

更改馈送处理器的默认行为是在成功执行委托后检查点:https ://docs.microsoft.com/azure/cosmos-db/change-feed-processor#processing-life-cycle

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

  1. 阅读更改提要。
  2. 如果没有更改,则休眠一段预定义的时间(可使用 Builder 中的 WithPollInterval 自定义)并转到 #1。
  3. 如果有更改,请将其发送给代表。
  4. 当代理成功处理完更改后,使用最新处理的时间点更新租用存储并转到#1。

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

从评论中添加:可能不会重试批次的唯一情况是抛出的批次是第一个(租约没有继续)。因为当主机再次拿起租约重新处理时,它没有时间点可以重试。根据官方文档,一个租约由单个实例拥有,因此其他实例不可能获取相同的租约并并行处理它(在相同的部署单元上下文中)。

于 2020-10-27T15:50:25.553 回答