You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Azure Function中返回多条Service Bus消息?

Azure Function Service Bus输出绑定批量发送消息解答

你完全可以在Azure Function中批量输出多个Message(旧版Service Bus SDK)/ServiceBusMessage(5.x+新版SDK)实例,你对ICollector<T>泛型参数的推测是错误的:

当T指定为原生Service Bus消息类型时,输出绑定会直接识别原生消息实例的所有配置,不会将其作为负载序列化处理,SessionId、MessageId、自定义属性等所有消息配置都可以正常生效。

可用实现方式

  • 同步场景使用ICollector<Message>/ICollector<ServiceBusMessage>的Add()方法逐条添加消息
  • 异步场景使用IAsyncCollector<Message>/IAsyncCollector<ServiceBusMessage>的AddAsync()方法逐条添加消息
  • 隔离进程模型中也可以直接返回ServiceBusMessage[]数组批量输出消息

示例代码(进程内模型 5.x+新版SDK)

using Azure.Messaging.ServiceBus;
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
using System;
using System.Text;

public static class SendMultipleServiceBusMessages
{
    [FunctionName("SendBatchMessages")]
    public static void Run(
        [TimerTrigger("0 */5 * * * *")] TimerInfo timerInfo,
        [ServiceBus("target-queue-name", Connection = "YourServiceBusConnString")] ICollector<ServiceBusMessage> outputMessages,
        ILogger log)
    {
        // 批量生成10条消息,每条可独立配置所有消息属性
        for (int i = 0; i < 10; i++)
        {
            var message = new ServiceBusMessage(Encoding.UTF8.GetBytes($"业务数据内容 {i}"))
            {
                SessionId = $"session-group-{i % 4}", // 正常配置会话ID
                MessageId = Guid.NewGuid().ToString(),
                TimeToLive = TimeSpan.FromHours(2),
                Subject = $"业务消息类型{i}"
            };
            // 添加自定义业务属性
            message.ApplicationProperties.Add("BizType", $"Order_{i}");
            message.ApplicationProperties.Add("Priority", i % 2 == 0 ? "High" : "Normal");

            outputMessages.Add(message);
        }
        log.LogInformation("批量消息添加完成");
    }
}

注意事项

  • 仅当T为自定义POCO类时,绑定才会自动将POCO序列化为JSON作为消息负载,此时无法为单条消息单独配置SessionId等属性
  • 批量发送的总消息大小不能超过Service Bus对应层级的单批发送限制:标准层单批最大256KB,高级层单批最大1MB,超出限制需要拆分多个批次发送
  • 异步场景优先使用IAsyncCollector获得更好的运行性能

内容的提问来源于stack exchange,提问作者Herman Kan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 12:15:09