更新时间:2024-10-17 GMT+08:00
分享

云端下发消息到边缘节点

操作场景

IEF支持从云端SystemREST下发消息到边缘节点的SystemEventBus(MQTT broker)或ServiceBus两种场景,本章节是以前者为例。

通过调用开放在公网的IEF云端的REST Gateway接口,结合节点ID和自定义Topic,向边缘节点中的SystemEventBus发送消息。您的终端设备可以通过订阅对应的自定义Topic进行消息接收,实现自定义Topic的从云到边的消息下发。

使用方法主要分如下三个步骤。

  1. 创建消息路由
  2. 发送消息
  3. 接收消息

创建消息路由

SystemREST和SystemEventBus为系统默认端点,无需创建。其中SystemREST代表该Region下IEF云端REST Gateway接口。SystemEventBus代表边缘节点的MQTT broker。

  1. 登录IEF管理控制台。
  2. 选择左侧导航栏“边云消息 > 消息路由”
  3. 单击页面右上角“创建消息路由”
  4. 填写相关参数。

    图1 创建消息路由
    • 消息路由名称:输入消息路由名称,如SystemREST2SystemEventBus。

      消息路由和系统订阅是同一种资源,命名不能冲突。

    • 源端点:选择SystemREST。
    • 源端点资源:填写符合URL路径的以“/”开头的字符串,可以使用{}作为入参进行层级模糊匹配,如/aaa/{any-str}/bbb可以匹配/aaa/ccc/bbb或者/aaa/ddd/bbb。整个源端点资源为调用REST接口时的匹配字段。
    • 目的端点:选择SystemEventBus。
    • 目的端点资源:目的端点资源为消息转发至MQTT时对应的Topic前缀。

    源端点资源和目的端点资源都填写为“/”时,IEF会对所有发送到REST接口的请求转发到对应节点的MQTT中,且消息的Topic与请求URL一致。

  5. 单击“创建”

    “消息路由”页面可以看到已创建的路由。

    图2 消息路由

发送消息

从云端SystemREST下发到边缘节点的SystemEventBus,您首先需要获取SystemREST的Endpoint,然后需要构造请求,将消息通过路由发送至SystemEventBus。

  1. 获取SystemREST的Endpoint。

    1. 登录IEF管理控制台。
    2. 选择左侧导航栏“边云消息 > 消息端点”。在SystemREST所在行“消息端点属性”列,public的取值即为SystemREST的Endpoint,如下图。
      图3 SystemREST的Endpoint

      此处SystemREST的Endpoint还支持如下地址,如下地址同时支持AK/SK和Token认证,推荐使用下面地址。

      • 华南-广州:ief-stargate.cn-south-1.myhuaweicloud.com
      • 华北-北京一:ief-stargate.cn-north-1.myhuaweicloud.com
      • 华北-北京四:ief-stargate.cn-north-4.myhuaweicloud.com
      • 华东-上海一:ief-stargate.cn-east-3.myhuaweicloud.com

  2. 构造请求,发送消息。

    往SystemREST发送消息,需构造HTTPS请求,具体信息如下。

    • Method:POST
    • URL:https://{rest_endpoint}/{node_id}/{topic},rest_endpoint即1中获取的Endpoint,node_id为边缘节点ID,topic为消息的主题,即创建消息路由中定义的源端点资源。
    • Body:发送的消息内容,由用户自定义。
    • Header:X-Auth-Token,取值为该用户在IAM获取的有效Token,Token获取方法请参见用户Token
    • AK/SK认证方法请参见AK/SK认证

    例如使用Postman发送如下消息。

    图4 发送消息

接收消息

  1. 登录边缘节点。
  2. 使用MQTT客户端接收消息。

    当前边缘节点MQTT支持两种模式。

    • 一种是内置的MQTT broker(使用8883端口),需要使用节点证书认证,然后订阅对应Topic接收消息,具体使用方式请参见使用证书进行安全认证
    • 另外一种是使用外置的MQTT broker(使用1883端口),需要先安装第三方MQTT broker,然后订阅对应Topic接收消息。

    这里介绍使用外置的MQTT broker的方式,外置的MQTT broker需要先安装MQTT broker,例如安装Mosquitto,步骤如下。

    • 对于Ubuntu操作系统,可以使用如下命令安装mosquitto:
      apt-get install mosquitto
      systemctl start mosquitto
      systemctl enable mosquitto
    • 对于CentOS操作系统,使用如下命令安装mosquitto:
      yum install epel-release
      yum install mosquitto
      systemctl start mosquitto
      systemctl enable mosquitto

    安装完成后,使用订阅命令订阅,订阅后如果有消息发送,就会收到消息,如下所示。其中#表示订阅任何主题,可以替换为指定的主题,如/aaa/bbb等。

    [root@ief-node ~]# mosquitto_sub -t '#' -d 
    Client mosq-m02iwjsp4j2ISMw6rw sending CONNECT 
    Client mosq-m02iwjsp4j2ISMw6rw received CONNACK (0)
    Client mosq-m02iwjsp4j2ISMw6rw sending SUBSCRIBE (Mid: 1, Topic: #, QoS: 0, Options: 0x00) 
    Client mosq-m02iwjsp4j2ISMw6rw received SUBACK 
    Subscribed (mid: 1): 0
    Client mosq-m02iwjsp4j2ISMw6rw received PUBLISH (d0, q0, rQ, mQ, '/aaa', ... (31 bytes))
    {
        "test-key": "test-value"
    }

相关文档