【问题标题】:Services bus message receive in Azure Function在 Azure Function 中接收服务总线消息
【发布时间】:2018-06-07 09:41:37
【问题描述】:

我创建了一个 ServicesBus 队列并开始发送数千条消息

await queueClient.SendBatchAsync(brokeredMessagesList);

另一方面,我创建了 azure 函数来接收来自 ServicesBus 队列的消息。这是我的代码

public static async Task RunAsync([ServiceBusTrigger("batch-input", AccessRights.Manage,
        Connection = "ServiceBusConnection")]BrokeredMessage message, TraceWriter log)
    {
        string body;
        using (var stream = message.GetBody<Stream>())
        using (var streamReader = new StreamReader(stream, Encoding.UTF8))
        {
            body = await streamReader.ReadToEndAsync();
        }
        SampleMessage sampleMessage = JsonConvert.DeserializeObject<SampleMessage>(body);

        await SaveMessageIntoAzureTableAsync(sampleMessage);
        //await message.CompleteAsync();
        log.Info($"Message body: {sampleMessage}");
    }

这段代码在我的本地工作,但我对缩放和批处理更感兴趣。

如果队列中没有大量消息,Azure 函数缩放将如何工作?我没有看到任何文档

预取计数设置将应用于本地? here我看到默认预取计数是100。

我应该什么时候调用完整的方法(不管有没有这个我的代码都在工作)?

await message.CompleteAsync();

【问题讨论】:

    标签: azure azure-functions azureservicebus


    【解决方案1】:

    Functions runtime 将批量检索消息并并行调用多个函数调用。您可以使用 host.json 文件调整 Prefetch Count 和其他一些设置。

    如果队列大小持续增长,Azure 将启动更多实例,这些实例也会并行处理。

    您永远不应该显式调用CompleteAsync,这将由运行时为您完成任何成功执行。

    【讨论】:

    • 我得到了部分答案。如果队列中有 1M 条消息并且 PrefectCount=100。 Azure 函数的一个实例将开始并行处理 100 条消息。 (每条消息处理平均时间为 0.5 分钟)Auzre 将如何启动更多实例?计算方法是什么?
    • @PankajRawat 确切的横向扩展算法/策略是由 Azure 管理的黑匣子,没有记录在任何地方。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 2017-03-28
    相关资源
    最近更新 更多