Azure IoT Edge C#模块:消息推送至IoT Hub及调用input1方法
向Azure IoT Edge自定义C#模块发送消息并触发input1的方法
你的模块已通过SetInputMessageHandlerAsync("input1", ProcessMessageAsync, null, cancellationToken)完成了input1的消息回调注册,以下是几种触发该回调的常用方式:
1. 通过IoT Edge路由从其他模块转发消息
如果你的Edge部署中包含其他模块(比如官方的SimulatedTemperatureSensor),可以通过配置edgeHub的路由规则,将其他模块的输出消息转发到你的模块input1:
编辑部署清单中$edgeHub模块的routes节点,添加如下规则:
"routes": { "samplemodule-input1-route": "FROM /messages/modules/<其他模块名>/outputs/* INTO BrokeredEndpoint(\"/modules/<你的模块名>/inputs/input1\")" }
替换<其他模块名>和<你的模块名>为实际名称,重新部署Edge设备后,其他模块发送的消息会自动路由到你的input1,触发消息处理逻辑。
2. 从IoT Hub直接发送消息到input1
Azure门户操作步骤
- 登录Azure门户,进入目标IoT Hub
- 依次进入设备 -> 目标Edge设备 -> 模块 -> 选中你的自定义模块
- 点击发送消息到模块,在弹窗中:
- 填写消息内容(例如
{"content": "test input1"}) - 选择输入名称为
input1 - 点击发送,模块日志会显示收到消息并触发
ProcessMessageAsync
- 填写消息内容(例如
C#服务端代码发送
使用IoT Hub服务端SDK编写代码发送消息:
using Microsoft.Azure.Devices; using System.Text; var serviceClient = ServiceClient.CreateFromConnectionString("<IoT Hub连接字符串>"); var deviceId = "<Edge设备ID>"; var moduleId = "<你的模块名称>"; var message = new Message(Encoding.UTF8.GetBytes("测试发送到input1的消息")); message.InputName = "input1"; await serviceClient.SendAsync(deviceId, moduleId, message); await serviceClient.CloseAsync();
替换占位符为实际信息后运行代码,即可直接发送消息到模块的input1。
3. 使用Azure IoT Explorer工具测试
- 下载并打开Azure IoT Explorer,连接到你的IoT Hub
- 找到目标Edge设备,展开后选中你的自定义模块
- 点击发送消息到模块,设置输入名称为
input1,填写消息内容后点击发送,即可触发input1的消息处理逻辑。
你的模块代码已正确实现input1的消息处理,消息到达后会自动执行ProcessMessageAsync,处理完成后还会将消息转发到output1,可通过模块日志或output1的路由目标验证处理结果。
内容的提问来源于stack exchange,提问作者user584018
相关产品推荐
相关产品推荐

