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

在Azure Functions Python v2中将Azure Service Bus队列消息解码为JSON

在Azure Functions Python v2中解码Azure Service Bus队列消息为JSON对象

解决方法

对于ServiceBusReceivedMessage类型的消息,需通过body属性获取原始字节数据,解码为字符串后再解析成JSON对象。之前直接对msg或msg.message调用decode方法失败,是因为这两个对象是封装后的消息实例,并非原始字节流。

修改后的代码示例

import json
import logging
import azure.functions as func
from azure.servicebus import ServiceBusClient

app = func.FunctionApp()

@app.function_name(name="mytimer")
@app.schedule(schedule="0 */30 * * * *", arg_name="mytimer", run_on_startup=True) 
def procesReadings(mytimer: func.TimerRequest) -> None:
    servicebus_client = ServiceBusClient.from_connection_string(conn_str=CONNECTION_STR)

    with servicebus_client:
        receiver = servicebus_client.get_queue_receiver(queue_name=QUEUE_NAME)
        with receiver:
            received_msgs = receiver.peek_messages(max_message_count=5)
            for msg in received_msgs:
                # 获取消息字节内容并解码为UTF-8字符串
                msg_str = msg.body.decode('utf-8')
                # 解析为JSON对象
                try:
                    msg_json = json.loads(msg_str)
                    logging.info(f"解析后的JSON消息: {msg_json}")
                    logging.info(f"消息类型: {type(msg_json)}")
                except json.JSONDecodeError as e:
                    logging.error(f"JSON解析失败: {str(e)}")

补充说明

  • 若消息体是标准JSON字节流,上述代码可直接完成解析。
  • 若消息采用了其他序列化方式(如Avro、Protobuf),需先对应反序列化,再转换为JSON对象。
  • 加入异常捕获可避免因消息格式不符合JSON规范导致函数运行报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 06:02:43