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

新手求教:如何以JSON格式获取Azure Service Bus Queue的消息响应

从Azure Service Bus Queue接收JSON格式消息的方法

作为经常处理Azure Service Bus相关问题的开发者,我来给你详细讲讲怎么接收队列里的消息并解析成JSON格式——这其实是个很常见的场景,新手也能快速上手~

首先得确认几个前提:你已经有了Azure Service Bus命名空间和目标队列,并且发送到队列的消息本身是JSON格式的字符串(如果发送的不是JSON,那得先调整发送端的逻辑哦)。下面我用两种常用的SDK来演示,你可以根据自己熟悉的语言选:

.NET SDK 实现步骤

1. 安装依赖包

先在你的.NET项目里安装Azure官方的Service Bus SDK:

dotnet add package Azure.Messaging.ServiceBus

2. 编写接收并解析JSON的代码

这里用异步方式(推荐,性能更好),代码里会把收到的消息内容反序列化为JSON对象:

using Azure.Messaging.ServiceBus;
using System.Text.Json;

// 配置你的Service Bus连接字符串和队列名称
string connectionString = "你的Service Bus连接字符串";
string queueName = "目标队列名称";

// 创建ServiceBusClient实例(建议单例复用,不要每次接收都新建)
await using var client = new ServiceBusClient(connectionString);

// 创建队列接收器
ServiceBusReceiver receiver = client.CreateReceiver(queueName);

try
{
    // 接收一条消息(也可以用ReceiveMessagesAsync批量接收)
    ServiceBusReceivedMessage message = await receiver.ReceiveMessageAsync();

    if (message != null)
    {
        // 把消息体(二进制)转成字符串,再反序列化为JSON对象
        string messageBody = message.Body.ToString();
        var jsonObject = JsonSerializer.Deserialize<dynamic>(messageBody);

        // 这里就可以处理你的JSON数据了,比如打印看看
        Console.WriteLine("解析后的JSON数据:");
        Console.WriteLine(JsonSerializer.Serialize(jsonObject, new JsonSerializerOptions { WriteIndented = true }));

        // 处理完消息后,标记为已完成(从队列移除)
        await receiver.CompleteMessageAsync(message);
    }
}
catch (Exception ex)
{
    Console.WriteLine($"接收或解析消息时出错:{ex.Message}");
    // 可选:如果处理失败,可以放弃消息(回到队列)或者死信
    // await receiver.AbandonMessageAsync(message);
    // await receiver.DeadLetterMessageAsync(message);
}
finally
{
    await receiver.DisposeAsync();
}

Python SDK 实现步骤

1. 安装依赖包

用pip安装Azure Service Bus的Python SDK:

pip install azure-servicebus==7.11.0

2. 编写接收并解析JSON的代码

from azure.servicebus import ServiceBusClient, ServiceBusMessage
import json

# 配置连接字符串和队列名称
CONNECTION_STR = "你的Service Bus连接字符串"
QUEUE_NAME = "目标队列名称"

def receive_and_parse_json():
    # 创建ServiceBusClient
    servicebus_client = ServiceBusClient.from_connection_string(conn_str=CONNECTION_STR, logging_enable=True)
    
    with servicebus_client:
        # 创建队列接收器
        receiver = servicebus_client.get_queue_receiver(queue_name=QUEUE_NAME)
        
        with receiver:
            # 接收消息(batch_size可以调整批量接收的数量)
            received_messages = receiver.receive_messages(max_wait_time=5, max_message_count=1)
            
            for msg in received_messages:
                # 解析消息体为JSON
                message_body = msg.body.decode('utf-8')
                json_data = json.loads(message_body)
                
                # 处理JSON数据
                print("解析后的JSON数据:")
                print(json.dumps(json_data, indent=2))
                
                # 标记消息为已完成
                receiver.complete_message(msg)

if __name__ == "__main__":
    receive_and_parse_json()

一些新手友好的建议

  • 连接字符串保密:千万不要把Service Bus的连接字符串硬编码到代码里,建议用Azure Key Vault或者环境变量来管理,避免泄露。
  • 消息格式校验:接收前可以先检查消息体是不是有效的JSON,避免解析出错,比如用try-except包裹json解析的步骤。
  • 批量接收优化:如果队列里消息很多,用批量接收(比如.NET的ReceiveMessagesAsync,Python的receive_messages指定max_message_count)能提升效率。
  • 异常处理:处理消息时如果出错,记得根据业务逻辑选择放弃消息(回到队列)、死信(放到死信队列),避免消息丢失或者重复处理。

内容的提问来源于stack exchange,提问作者Mark-VII

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:51:21