如何在Node.js Azure函数中获取Service Bus消息的自定义属性?
在Node.js Azure Functions中访问Service Bus消息的内容和自定义属性
我来帮你搞定这个问题!在Node.js版的Azure Functions里,要获取来自IoT Hub转发的Service Bus消息的消息体和**自定义属性(包括设备ID等元数据)**其实非常直观,下面我给你详细说明实现方式:
核心思路
当IoT Hub把设备消息转发到Service Bus队列/主题后,你的Node.js函数通过Service Bus触发器接收消息时,触发器会把完整的消息对象传递给函数,其中:
- 消息体直接存放在消息对象的
body属性中 - 所有自定义属性(包括设备端设置的属性、IoT Hub自动添加的元数据)都在
userProperties对象里
完整代码示例
1. 函数逻辑代码(index.js)
module.exports = async function(context, mySbMsg) { // 1. 获取设备发送的字符串格式消息体 const messageContent = mySbMsg.body; context.log(`收到来自设备的消息: ${messageContent}`); // 2. 获取IoT Hub自动添加的设备ID元数据 const deviceId = mySbMsg.userProperties['iothub-connection-device-id']; context.log(`发送消息的设备ID: ${deviceId}`); // 3. 获取设备端自定义的属性(替换成你实际的属性键名) const customDeviceProperty = mySbMsg.userProperties['device-custom-property']; if (customDeviceProperty) { context.log(`设备自定义属性值: ${customDeviceProperty}`); } // 可选:遍历所有自定义属性,方便调试查看所有元数据 context.log('=== 所有消息属性 ==='); Object.entries(mySbMsg.userProperties).forEach(([key, value]) => { context.log(`${key}: ${value}`); }); };
2. 绑定配置(function.json)
确保你的触发器配置正确,指定Service Bus的队列/主题名称和连接字符串:
{ "bindings": [ { "name": "mySbMsg", "type": "serviceBusTrigger", "direction": "in", "queueName": "your-target-queue", // 替换成你的Service Bus队列名称 "connection": "ServiceBusConnectionString", // 对应应用设置里的连接字符串键名 "accessRights": "manage" } ] }
关键注意事项
- 连接字符串配置:请在Azure门户的函数应用「配置」中添加
ServiceBusConnectionString,值为你的Service Bus命名空间连接字符串;本地开发时则放在local.settings.json里。 - 消息体格式:如果设备发送的是JSON格式消息,你可以用
JSON.parse(mySbMsg.body)将字符串解析为JSON对象使用。 - IoT Hub元数据:除了
iothub-connection-device-id,IoT Hub还会自动添加其他元数据,比如iothub-enqueuedtime(消息入队时间)、iothub-message-source(消息来源)等,都可以通过userProperties直接获取。
内容的提问来源于stack exchange,提问作者Paweł Skorupiński
相关产品推荐
相关产品推荐

