Azure功能的事件中心输入绑定

时间:2017-05-17 14:22:32

标签: c# azure azure-functions azure-eventhub

我有一个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是否意味着我将在一次执行中收到64条消息?

2 个答案:

答案 0 :(得分:3)

默认情况下,它将逐步进行处理,但您也可以进行批量处理。将功能的签名更改为

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

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

参考github issue

答案 1 :(得分:2)

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

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

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

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

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

    2. 您在问题中指定的host.json配置允许您试验正确的批量大小和预取缓冲区,以满足工作流程的需要。

    3. 其他评论:

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