Azurefunction的事件中心输入绑定

我有一个Azure函数,其输入绑定到事件中心。

public static async Task Run(TraceWriter log, string eventHubMessage) 

触发该函数时,默认情况下每次执行会收到多少条消息?

这是1次执行= 1条消息吗?

我已阅读文档并了解您可以在函数的host.json文件中设置这些属性:

 "eventHub": { // The maximum event count received per receive loop. The default is 64. "maxBatchSize": 64, // The default PrefetchCount that will be used by the underlying EventProcessorHost. "prefetchCount": 256 } 

maxBatchSize是否意味着我将在1次执行中收到64条消息?

@Mikhail是对的。 我只想添加以下内容:

  1. 如果使用默认的EventHub-Trigger C#模板,则创建的Function将在每次执行时处理1条消息。
  1. 如果您需要批量处理每个执行,请更改以下内容:

    一个。 在function.json ,添加属性"cardinality":"many" ,如下所示。

    湾 在run.csx ,修改函数签名并在循环中处理消息,例如,

    public static async Task Run(TraceWriter log, string[] eventHubMessages) { foreach(string message in eventHubMessages) { // process messages } }

  2. 您在问题中指定的host.json配置允许您尝试使用正确的批处理大小和预取缓冲区来满足工作流程的需要。

附加评论:

  1. 根据消费计划,function目前允许最长默认5分钟执行时间(可配置最多10分钟 – 在2017年11月30日增加) 。 您应该尝试使用maxBatchSizeprefetchCount设置,以确保批次的典型执行将在时间范围内完成。
  1. prefetchCount应该是maxBatchSize的 3-4倍。
  1. 每个Function主机实例都由一个EventProcessorHost(EPH)支持。 EPH使用检查点机制来标记上次成功处理的消息。 由于函数代码主机崩溃,超时或分区租约丢失导致未捕获的exception,函数执行可能会提前终止,从而导致检查点不成功。 当Function执行再次重新启动时,检索到的批处理将包含来自上一个已知检查点的消息。 为maxBatchSize设置一个非常高的值也意味着您必须重新处理大批量。 EventHub保证至少一次交付但不是最多一次交付。 Azure Functions不会尝试更改该行为。 如果只有唯一消息是优先事项,则需要在下游工作流中处理重复数据删除。

默认情况下,它将是1合1处理,但您也可以批量处理。 将function的签名更改为

 public static async Task Run(TraceWriter log, string[] eventHubMessages) 

(如果你像我一样更改名称,也重命名绑定参数)

参考github问题 。