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

如何从Http触发的Azure函数向Azure服务总线主题发送消息?

实现方案

核心思路

直接通过ServiceBusSender客户端实例发送消息,借助依赖注入获取该实例,完全避开ServiceBusOutput输出绑定特性。

实现步骤

  1. 确认依赖包版本
    确保项目已安装Microsoft.Azure.WebJobs.Extensions.ServiceBus 5.7.0版本,和你使用的ServiceBus.Extensions版本保持一致。

  2. 注入ServiceBusSender实例
    在函数类的构造函数中注入ServiceBusClient,再用它创建对应主题的ServiceBusSender实例。

  3. 在HttpTrigger方法中完成消息发送与响应返回
    在触发方法里读取请求内容、构造服务总线消息、调用发送方法,最后构建并返回HttpResponseData。

完整代码示例

using Azure.Messaging.ServiceBus;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using System.Net;
using System.IO;

public class TopicMessageSenderFunction
{
    private readonly ServiceBusSender _topicSender;

    // 构造函数注入ServiceBusClient,创建指定主题的Sender
    public TopicMessageSenderFunction(ServiceBusClient serviceBusClient)
    {
        // 替换为你的目标主题名称
        _topicSender = serviceBusClient.CreateSender("your-target-topic");
    }

    [Function("HttpToServiceBusTopic")]
    public async Task<HttpResponseData> Run(
        [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequestData req)
    {
        try
        {
            // 读取HTTP请求的内容
            var requestContent = await new StreamReader(req.Body).ReadToEndAsync();
            
            // 构建服务总线消息
            var sbMessage = new ServiceBusMessage(requestContent);
            // 可选:设置消息的自定义属性、会话ID等
            // sbMessage.ApplicationProperties.Add("Key", "Value");

            // 发送消息到主题
            await _topicSender.SendMessageAsync(sbMessage);

            // 返回成功响应
            var successResp = req.CreateResponse(HttpStatusCode.OK);
            await successResp.WriteStringAsync("消息已成功投递到服务总线主题");
            return successResp;
        }
        catch (Exception ex)
        {
            // 返回错误响应
            var errorResp = req.CreateResponse(HttpStatusCode.InternalServerError);
            await errorResp.WriteStringAsync($"消息发送失败:{ex.Message}");
            return errorResp;
        }
    }
}

配置说明

  • 在本地开发的local.settings.json或Azure应用的配置中心,添加服务总线连接字符串:
    {
        "Values": {
            "AzureWebJobsServiceBus": "你的服务总线连接字符串"
        }
    }
    
  • ServiceBusClient会自动读取上述配置项,无需手动初始化连接。

内容的提问来源于stack exchange,提问作者Erik Z

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 12:25:59