Python版Azure Functions V2:如何为Service Bus消息设置SessionID
解决Azure Functions V2 Python版设置Service Bus主题消息SessionID的问题
你之前通过JSON字符串的brokerProperties设置SessionID不生效,核心原因是:当使用func.Out[str]作为输出绑定类型时,Azure Functions只会把字符串当作消息的内容体,不会解析其中的属性字段。要设置SessionID这类Service Bus原生属性,必须用azure.servicebus库的ServiceBusMessage对象构造消息。
修改步骤
- 导入
ServiceBusMessage类 - 替换JSON字符串构造逻辑,用
ServiceBusMessage实例直接设置session_id - 自定义属性通过消息对象的
application_properties字典添加 - 输出绑定参数可指定为
func.Out[ServiceBusMessage]以明确类型
修改后的完整代码
import logging import azure.functions as func from datetime import datetime from azure.servicebus import ServiceBusMessage # 新增导入 app = func.FunctionApp() @app.route(route="http_trigger_topic", auth_level=func.AuthLevel.ANONYMOUS) @app.service_bus_topic_output(arg_name="message", connection="ServiceBusConnection", topic_name="alfdevapi6topic") def http_trigger_topic(req: func.HttpRequest, message: func.Out[ServiceBusMessage]) -> func.HttpResponse: logging.info('Python HTTP trigger function processed a request.') myMessage = "Hi alf this is my message via the queue to you." logging.info(myMessage) input_msg = req.params.get('message') now = datetime.now() # 构造带SessionID的Service Bus消息 sb_message = ServiceBusMessage(body=myMessage) sb_message.session_id = "1" # 直接设置SessionID # 添加自定义属性 sb_message.application_properties["messagenumber"] = 0 sb_message.application_properties["timePublish"] = now.strftime("%d/%m/%Y %H:%M:%S") # 发送消息 message.set(sb_message) return func.HttpResponse( "消息已发送并成功设置SessionID", status_code=200 )
关键说明
ServiceBusMessage是Azure Service Bus官方SDK提供的消息对象,原生支持设置session_id、message_id等Broker属性- 自定义业务属性需存入
application_properties字典,对应原代码中的customProperties - 输出绑定参数类型声明为
func.Out[ServiceBusMessage]可增强类型校验,也可保留func.Out不指定类型,Functions运行时会自动适配
内容的提问来源于stack exchange,提问作者Skip
相关产品推荐
相关产品推荐

