IoT Edge模块实例发现调用另一个模块上的方法所需的ID的首选方法是什么?

时间:2017-12-19 01:50:00

标签: azure-iot-edge

在IoT Edge网关的新预览版中,一个模块可以通过InvokeDeviceMethodAsync调用另一个模块上的方法。这会将设备ID和模块ID作为参数,可能会告诉Edge如何路由呼叫。在同一网关内呼叫时,device id参数应为IoT Edge hub中网关实例的设备ID。模块ID应该是从IoT边缘下推到网关的模块实例的模块ID。很容易对这些id进行硬编码,但显然不可取。您可以将硬编码值放在配置文件中,这些配置文件可以在加载时由模块读取,这样可以解决问题,但仍然不理想。有没有办法以编程方式发现/填充所需的值?部署json configs是否支持变量替换或类似部署以填充实例ID?

2 个答案:

答案 0 :(得分:1)

我认为目前没有一种首选方式。你基本上有三种选择,我提到其中两种。

  1. 在模块部署清单的Env部分中使用createOptions
  2. 您可以通过Module Twin作为属性推送到模块
  3. 我个人会在创建部署清单期间定义模块ID时选择选项1,并且您还可以将环境变量注入清单中的特定模块创建选项。

    如果模块通信会根据某些域规则发生变化,我会选择方法2,但在我的项目中找不到任何用例,这是真的。

    BTW我会回答评论,但缺少声誉。

答案 1 :(得分:0)

IoT Edge设备上模块进行方法调用的典型方案是,模块从同一设备上的其他模块或连接到该IoT Edge网关设备的下游设备接收遥测消息,并根据消息内容,决定在发送方模块或设备上调用方法以指示某些更改(例如,如果消息指示设备运行过热,则模块可以调用方法来降低风扇速度等)。

在这种情况下,模块可以从消息本身获取发送方模块的设备ID和模块ID。消息对象具有以下属性,提供此信息 - ConnectionDeviceId ConnectionModuleId