【问题标题】:Sending C2D message to Azure IoT Edge将 C2D 消息发送到 Azure IoT Edge
【发布时间】:2020-10-05 09:35:06
【问题描述】:

我知道 Azure IoT Edge 不支持 C2D,可以选择使用 Direct Method。

我可以使用模块客户端代码并向模块发送消息吗?

我有一个 ModuleA,它有 output1,而 ModuleB 有一个 Handler input1。 我有如下路线

"ModuleAToModuleB": "FROM /messages/modules/ModuleA/outputs/output1 INTO BrokeredEndpoint(\"/modules/ModuleB/inputs/input1\")",

我使用控制台应用程序中的以下代码,并根据特定模块的连接字符串(ModuleA 连接字符串)向特定模块发送消息

string dataString = JsonConvert.SerializeObject(jData);
byte[] dataBytes = Encoding.UTF8.GetBytes(dataString);
var pipeMessage = new Message(dataBytes);
var moduleClient = ModuleClient.CreateFromConnectionString("HostName=xxx.azure-devices.net;DeviceId=xxx-01;ModuleId=ModuleA;SharedAccessKey=XXXXXXX", TransportType.Mqtt);
await moduleClient.SendEventAsync("output1", pipeMessage);

这段代码会起作用吗,它会将消息从 ModuleA 发送到 ModuleB 吗?

【问题讨论】:

  • 您是在尝试从云端向特定模块发送消息,还是在设备本身的模块之间进行边缘路由?
  • 将消息从云端发送到设备,我从笔记本电脑/PC 上的控制台应用程序调用上述代码
  • 感谢您的解释!我已经为这种情况创建了一个答案!

标签: azure azure-iot-hub azure-iot-edge


【解决方案1】:

如果您想在控制台应用程序中将任何内容从您的笔记本电脑/PC 发送到您的 IoT Edge 设备,您将需要使用直接方法,就像您在问题中提到的那样。为此,您可以使用 Service SDK 并使用以下方法:

InvokeDeviceMethodAsync(string deviceId, string moduleId, CloudToDeviceMethod cloudToDeviceMethod);

在您的示例中,您建议使用ModuleClient 向您的模块发送消息。这不起作用,ModuleClient 设计为仅在 Azure IoT Edge 运行时中使用,而您使用的方法 (ModuleClient.CreateFromConnectionString) 是运行时将使用环境变量设置连接的方法在设备上可用。

使用服务 SDK,您可以将直接方法发送到模块 A,并且没有什么能阻止您将该方法的有效负载转发到模块 B。您已经正确设置了路由。

【讨论】:

    【解决方案2】:

    你需要调用像 InvokeMethodAsync 这样的函数,它是从 moduleA 到 moduelB 的直接方法可以被调用。在您展示的示例中,您似乎正在调用可能不起作用的 sendEventAsync。示例在C#.

    另外请通过这个link,它还建议了另一种模块到模块通信的方法。

    除了使用直接方法外,还可以使用两个 模块之间直接通信,绕过边缘 中心。运行时通过 Docker 的网络功能管理 每个模块(容器)的 DNS 条目。这允许一个模块 通过名称解析另一个模块的 IP 地址。

    有关此操作的示例,您可以按照 SQL 教程进行操作 这里: https://docs.microsoft.com/en-us/azure/iot-edge/tutorial-store-data-sql-server。 本教程使用一个模块从 Edge Hub 中读取数据并写入 使用 SQLServer 客户端将其放入另一个托管 SQLServer 的模块中 开发工具包。这种与 SQLServer 的交互不使用 Edge Hub 交流

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-23
      相关资源
      最近更新 更多