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

从Microsoft.Azure.ServiceBus迁移到Azure.Messaging.ServiceBus发送主题消息咨询

你的实现方向是正确的,Azure.Messaging.ServiceBus 包的发送逻辑确实遵循「创建ServiceBusClient实例→为指定主题创建ServiceBusSender→构造ServiceBusMessage发送」的流程。不过你当前的代码遗漏了旧版本中设置的几个核心消息属性,需要补充后才能和原有业务逻辑完全对齐。

新旧版本的属性对应关系如下:

  • 旧版Message.CorrelationId → 新版ServiceBusMessage.CorrelationId,用法完全一致
  • 旧版Message.Label → 新版ServiceBusMessage.Subject,属于属性改名,是迁移高频踩坑点
  • 旧版Message.UserProperties → 新版ServiceBusMessage.ApplicationProperties,存储自定义键值对的用法不变

额外优化提示:ServiceBusClient本身是线程安全的,建议不要在每次调用方法时都新建实例,可将其作为单例注入或者类的全局字段复用,避免频繁创建销毁带来的不必要连接开销。

补全后的完整实现如下:

// 建议将ServiceBusClient实例提为全局复用,此处示例仅展示方法内逻辑对齐
public async Task SendMessageToServiceBusTopic<T>(T request, string topicSubName, string submissionNumber)
{
    // 实际使用时建议复用client实例,不要每次新建
    ServiceBusClient client = new ServiceBusClient(settings.ServiceBusConnectionString);
    ServiceBusSender sender = client.CreateSender(settings.ServiceBusTopic);

    byte[] bytes = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(request));
    var message = new ServiceBusMessage(bytes)
    {
        CorrelationId = context.CorrelationId,
        Subject = topicSubName,
        ApplicationProperties = { { "TrackingId", submissionNumber } }
    };
    await sender.SendMessageAsync(message);

    // 仅当你不再需要使用sender和client时再释放,复用实例的情况下不需要每次调用都释放
    // await sender.DisposeAsync();
    // await client.DisposeAsync();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:54:00