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

如何从本地Spring服务向Azure IoT Edge自定义Java模块发送数据

Azure IoT Edge 本地Spring服务与自定义Java模块通信解决方案

错误原因说明

你之前的实现逻辑存在方向性错误:使用目标自定义模块的连接字符串构造ModuleClient调用sendEventAsync,本质是模拟该自定义模块的身份向edgeHub上报事件,消息流向是从模块到edgeHub,自然不会进入自定义模块的输入队列。

另外你对Routes的理解存在偏差:Routes不仅支持模块间、模块与edgeHub的通信,也支持下游设备/服务到模块、模块到下游设备的消息路由,完全可以满足你的需求。

可用实现方案

方案1:通过edgeHub路由转发(推荐,符合IoT Edge原生架构)

  • 先将本地Spring服务作为IoT Edge的下游挂载设备,申请对应的IoT设备连接字符串
  • 发送消息时给消息添加自定义标识属性,用于路由规则匹配
  • 在IoT Edge部署清单的路由配置中添加规则,将带指定标识的消息转发到自定义Java模块的输入端点,示例路由规则:
    FROM /messages/* WHERE targetModule = '你的自定义Java模块名称' INTO BrokeredEndpoint("/modules/你的自定义Java模块名称/inputs/input1")
    
  • 你的自定义Java模块添加对应input1端点的消息监听逻辑,即可正常收到Spring服务发送的数据

调整后的Spring服务端代码示例:

// 此处填写Spring服务作为下游设备的连接字符串,不是目标自定义模块的连接字符串
String connString = "你的Spring服务对应IoT设备连接字符串";
IotHubClientProtocol protocol = IotHubClientProtocol.AMQPS;
Message messageToSendFromDeviceToModule =  new Message("lorem ipsum.......");
// 添加自定义属性用于路由匹配
messageToSendFromDeviceToModule.setProperty("targetModule", "你的自定义Java模块名称");
ModuleClient moduleClient = new ModuleClient(connString ,protocol);
moduleClient.open();
moduleClient.sendEventAsync(messageToSendFromDeviceToModule ,null ,null);
System.out.println("MESSAGE SENT");
Thread.sleep(1000);
moduleClient.closeNow();

方案2:自定义模块直接暴露HTTP接口(适合本地低延迟交互)

  • 直接在自定义Java模块中内嵌轻量HTTP服务,对外暴露指定端口和数据接收接口
  • 本地Spring服务直接通过「模块所在主机IP+暴露端口+接口路径」发起HTTP请求,即可直接将数据传给自定义模块,无需经过edgeHub路由,适配本地低延迟交互场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:24:04