如何为Azure Functions EventHub侦听器配置Receiver批处理大小?

时间:2016-11-18 12:10:59

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

在最新的Microsoft.Azure.WebJobs.ServiceBus package中,它为您提供了从eventhubs receive batches of messages的能力。我想设置一批我想要收到多少邮件。

核心ServiceBus库允许您重载Receive()函数并提供batch size

如何在initial config of an EventHubs receiver中执行此操作,还是需要其他功能?

2 个答案:

答案 0 :(得分:4)

您可以通过eventHub中的host.json配置块执行此功能,如here所述。 E.g:

{
    "eventHub": {
        "maxBatchSize": 500,
        "prefetchCount": 100
    }
}

我们在创建EventProcessorOptions时将这些配置设置应用于EventProcessorHost(请参阅here)。

答案 1 :(得分:1)

斯蒂芬,

可以通过EventProcessorOptions配置MaxBatchSize,您可以在创建新EventHubConfiguration时将其作为参数传递。

var options = EventProcessorOptions.DefaultOptions;
options.MaxBatchSize = 50;
var eventHubConfig = new EventHubConfiguration(options);
string eventHubName = "MyHubName";
eventHubConfig.AddSender(eventHubName, "Endpoint=sb://test.servicebus.windows.net/;SharedAccessKeyName=SendRule;SharedAccessKey=xxxxxxxx");
eventHubConfig.AddReceiver(eventHubName, "Endpoint=sb://test.servicebus.windows.net/;SharedAccessKeyName=ReceiveRule;SharedAccessKey=yyyyyyy");

config.UseEventHub(eventHubConfig);
JobHost host = new JobHost(config);

正如您在EventHubConfiguration.cs的源代码中注意到的那样,如果未指定EventProcessorOptions,则MaxBatchSize默认设置为1000而不是10

public EventHubConfiguration(
        EventProcessorOptions options, 
        PartitionManagerOptions partitionOptions = null)
{
    if (options == null)
    {
        options = EventProcessorOptions.DefaultOptions;
        options.MaxBatchSize = 1000;
     }
     _partitionOptions = partitionOptions;

     _options = options;
}