云端下发消息到边缘节点
操作场景
IEF支持从云端SystemREST下发消息到边缘节点的SystemEventBus(MQTT broker)或ServiceBus两种场景,本章节是以前者为例。
通过调用开放在公网的IEF云端的REST Gateway接口,结合节点ID和自定义Topic,向边缘节点中的SystemEventBus发送消息。您的终端设备可以通过订阅对应的自定义Topic进行消息接收,实现自定义Topic的从云到边的消息下发。
使用方法主要分如下三个步骤。
创建消息路由
SystemREST和SystemEventBus为系统默认端点,无需创建。其中SystemREST代表该Region下IEF云端REST Gateway接口。SystemEventBus代表边缘节点的MQTT broker。
- 登录IEF管理控制台。
- 选择左侧导航栏“边云消息 > 消息路由”。
- 单击页面右上角“创建消息路由”。
- 填写相关参数。
图1 创建消息路由
- 消息路由名称:输入消息路由名称,如SystemREST2SystemEventBus。
消息路由和系统订阅是同一种资源,命名不能冲突。
- 源端点:选择SystemREST。
- 源端点资源:填写符合URL路径的以“/”开头的字符串,可以使用{}作为入参进行层级模糊匹配,如/aaa/{any-str}/bbb可以匹配/aaa/ccc/bbb或者/aaa/ddd/bbb。整个源端点资源为调用REST接口时的匹配字段。
- 目的端点:选择SystemEventBus。
- 目的端点资源:目的端点资源为消息转发至MQTT时对应的Topic前缀。
源端点资源和目的端点资源都填写为“/”时,IEF会对所有发送到REST接口的请求转发到对应节点的MQTT中,且消息的Topic与请求URL一致。
- 消息路由名称:输入消息路由名称,如SystemREST2SystemEventBus。
- 单击“创建”。
在“消息路由”页面可以看到已创建的路由。
图2 消息路由
发送消息
从云端SystemREST下发到边缘节点的SystemEventBus,您首先需要获取SystemREST的Endpoint,然后你需要构造请求,将消息通过路由发送至SystemEventBus。
- 获取SystemREST的Endpoint。
- 登录IEF管理控制台。
- 选择左侧导航栏“边云消息 > 消息端点”。在SystemREST所在行“消息端点属性”列,public的取值即为SystemREST的Endpoint,如下图。
图3 SystemREST的Endpoint
- 构造请求,发送消息。
往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。
例如使用Postman发送如下消息。
图4 发送消息
接收消息
- 登录边缘节点。
- 使用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" }