Azure 的 EventProcessorHost 何时调用 IEventProcessor.ProcessEventsAsync?

cac*_*sar 5 azure azure-sdk-.net azure-eventhub

我正在为 Azure EventHub 编写一个工作程序,我希望在EventProcessorHost之上构建;但是,我在一般 文档或 API 文档中找不到一些可能相关的详细信息。

EventProcessorHost何时调用 IEventProcessor ProcessEventsAsync ?

当事件中心流中有新消息时调用此方法。确保仅在处理完每批中的所有事件后才进行检查点。

虽然我们知道可枚举的消息中会有一些结果,但文档没有说明我们是否可以预期对 ProcessEventsAsync 的并发调用或在第一个调用正在进行时进行第二个调用。给出有关何时检查点的说明,这两种方法都没有多大意义,因为第二个调用可以完成,并且在流中比第一个未完成时处理的情况更进一步进行检查点,但文档中的确认会很好。

我假设 EventProcessorHost 将每次调用CreateEventProcessor(或 IEventProcessor,如果它们是唯一的)的输出用于一个分区,并且PartitionContext

同样,对CheckpointAsync 的调用是否会对调用ProcessEventsAsync产生任何影响。虽然它不应该允许稍后检查点,但我认为这是一个理性的选择。我还有一些关于检查点机制的其他问题,我将在另一个问题中解决这些问题(链接将在此处)。

在进行CloseAsync调用后是否还会进行 ProcessEventsAsync 调用(我假设不会,但没有找到)?是否会使用从 ProcessEventsAsync 返回的未完成的任务来完成?

简而言之,对我来说有意义的答案是,对于给定的处理器,在先前调用的任务完成之前不会调用 ProcessEventsAsync,但我无法从文档中确认这一点。

Pra*_*tic 2

虽然以下信息未经验证,但从逻辑上讲它应该像这样工作 -

  1. 一个分区内不应有任何对 ProcessEventAsync 的并发调用。否则,azure 如何保证一个分区内消息的排序。
  2. 我们可能必须异步处理每条消息。否则系统无法同时处理超过32条消息。(假设有32个分区)。