连接边缘baetyl-broker
背景描述
BIE内置baetyl-broker应用,作为边缘消息中间件。同时BIE内置南向驱动采集的数据,也都是先到baetyl-broker模块,然后通过云边协同baetyl-core将消息上报至云端。为了调试方便,通常有连接边缘baetyl-broker查看指定topic消息的需求。
本文将介绍,如何通过云端配置,开放边缘baetyl-broker的访问端口,以及如何通过云端定义的秘钥进行访问连接。
从 baetyl 2.1.1 版本开始,所有官方应用(baetyl-broker,baetyl-function,baetyl-rule)都默认集成baetyl-go-sdk,由baetyl-core负责这些官方应用的证书签发,服务间调用默认使用baetyl-core签发的证书进行认证。
开发者如果要想访问本地baetyl-broker,对baetyl-broker进行配置,开放外部访问。设置访问broker用户名和密码,并绑定宿主机监听端口,这样在任何机器上使用MQTT Client都可以使用host_machne_ip:port
访问baetyl-broker服务。
本文会对以上方案进行讲解。
配置指南
节点安装
参考快速入门安装边缘节点。在边缘端执行完安装命令以后,通过kubectl
命令查看baetyl-edge-system
命名空间内的系统应用。
root@userver-desk:~# kubectl get pod -n baetyl-edge-system
NAME READY STATUS RESTARTS AGE
baetyl-init-d968b7bb9-c8b22 1/1 Running 0 3h24m
baetyl-core-7d5995f956-7jszr 1/1 Running 0 3h24m
baetyl-rule-5f4d7f964-xprx8 1/1 Running 0 3h24m
baetyl-function-6c7fd69f44-xwnxk 1/1 Running 0 3h24m
baetyl-broker-6f9cbbd794-rb9p7 1/1 Running 0 3h24m
配置baetyl-broker访问方式
进入到边缘节点,点击应用部署,找到baetyl-broker应用,点击查看,如下图所示:
进入到baetyl-broker应用界面,切到数据卷页面,点击baetyl-broker-conf这个配置卷,如下图所示:
进入配置项配置页面,点击编辑,如下图所示:
在conf.yaml配置界面,默认配置信息如下:
更新上述配置信息,如下图所示:
session:
sysTopics:
- $link
- $baetyl
logger:
level: debug
encoding: console
listeners:
- address: 'tcp://0.0.0.0:8883'
principals:
- username: test
password: test
permissions:
- action: pub
permit:
- '#'
- action: sub
permit:
- '#'
配置解析:
- 为baetyl-broker增加
8883
监听端口,使用test/test
这样的用户名密码进行访问,该用户具有#
这个topic的pub/sub
权限。- 这里不一定必须是8883,可以是其他任何没有用过的端口,可以使用
netstat -ap | grep 8883
这个命令查看8883端口是否被占用
开放baetyl-broker本地访问端口
进入到baetyl-broker应用界面,点击配置,如下图所示:
在端口映射 > 宿主机端口那里添加一条端口映射记录,如下图所示:
配置解析
- 宿主机端口:8883, 容器端口:8883,协议:TCP
- 这样配置是让baetyl-broker的容器内端口映射到宿主机,可以通过宿主机[ip:port]方式进行访问。
使用MQTT Box进行测试访问
在工作PC上安装MQTT Box,配置连接信息,如下图所示:
返回MQTT Box,可以看到连接状态是Connected,测试消息订阅与发送,如下图所示:
系统主题说明
如果想要订阅查看像modbus、opc等系统内置南向驱动采集到的数据,可以订阅一下topic进行数据查看。
thing/{deviceProductKey}/{deviceName}/lifecycle/post 子设备上报在离线数据
thing/{deviceProductKey}/{deviceName}/property/post 子设备定期上报测点数据
thing/{deviceProductKey}/{deviceName}/event/post 子设备定期上报事件数据
thing/{deviceProductKey}/{deviceName}/property/invoke 驱动接收来自云端的变更(置数)
thing/{deviceProductKey}/{deviceName}/property/get 驱动接收来自云端的事件(召测)
thing/{deviceProductKey}/{deviceName}/raw/c2d 驱动接收来自云端的自定义格式消息(事件下发)
$baetyl/device/{device-name}/get 发送消息至该主题,获取设备所有数据
$baetyl/device/{device-name}/getResponse 订阅该主题,获取设备所有数据
可以使用通配方式进行订阅,比如订阅topic直接使用如下方式:
thing/+/+/lifecycle/post
thing/+/+/property/post
thing/+/+/event/post
thing/+/+/property/invoke
thing/+/+/property/get
thing/+/+/raw/c2d
$baetyl/device/+/get
$baetyl/device/+/getResponse
$baetyl/device/#