emqx 入门

2023-05-30  本文已影响0人  国服最坑开发

0x01 安装

环境: CentOS 7, 这里采用单机部署方式: Yum 方式安装

curl -s https://assets.emqx.com/scripts/install-emqx-rpm.sh | sudo bash
sudo yum install emqx -y
sudo systemctl start emqx

服务启动后,可通过netstat 指令查看相关端口

netstat -apn | grep emqx
tcp        0      0 0.0.0.0:18083           0.0.0.0:*               LISTEN      30562/emqx
tcp        0      0 0.0.0.0:4370            0.0.0.0:*               LISTEN      30562/emqx
tcp        0      0 0.0.0.0:8083            0.0.0.0:*               LISTEN      30562/emqx
tcp        0      0 0.0.0.0:8883            0.0.0.0:*               LISTEN      30562/emqx
tcp        0      0 0.0.0.0:8084            0.0.0.0:*               LISTEN      30562/emqx
tcp        0      0 0.0.0.0:5370            0.0.0.0:*               LISTEN      30562/emqx
tcp        0      0 0.0.0.0:1883            0.0.0.0:*               LISTEN      30562/emqx

其中,

其他不详,可能是ws, wss 端口。

0x02 Dashboard

初始密码: admin/public, 首次登录后,需要自行修改密码。

0x03 Topic 通配符

先看个topic例子:
aa/bb/cc
这是个典型的topic, 有三个层级

可以通过通配符进行不通类型的topic查询

系统topic

关于 topic 设计的一些建议

举例:

场景说明:
设备端接入mqtt服务时,需要订阅 dev/{dev_id}/down ,用于接收消息。 发消息时,向 dev/{dev_id}/up 主题发送即可。

0x04 关于EMQx 的服务端使用架构

上行消息

emqx 开源版没有直接对接外部mq的能力,但提供了一个webhook接口调用。
需要我们人肉智能实现一套api 转 mq(kafka) .

下行消息

一般的做法,需要在服务端启一个长期运行的client实例,可用于下发消息。
但是 emqx 提供了一个 rest api 能力,可直接通过 api 发布消息。

0x05 自签证书双向认证

参考这一篇: SSL自签名证书双向认证实践
完成自签名证书生成。
在本机 /etc/hosts 配置好测试域名和服务器IP的绑定关系。
这时会有这样几个文件:

5.1 emqx 服务端配置

本例emqx 部署在centos环境,配置文件位置: vim /etc/emqx/emqx.conf
上述前三个文件上传到服务器后,进行下述内容

listener {
  ssl {
    external = 8883
    keyfile = /etc/emqx/ssl/server.key
    certfile = /etc/emqx/ssl/server.crt
    cacertfile = /etc/emqx/ssl/ca.crt
    verify = verify_peer # 开启双向认证
    fail_if_no_peer_cert = true
  }
}

关于emqx lisener 生效,不需要重启整个实例。只需要对指定listener实例进行操作:

# 查看所有listener
emqx_ctl listeners
# 重启指定 ssl listener
emqx_ctl listeners restart ssl:default

到此,已完成服务端配置

5.2 客户端配置

与上述类似,给定三个文件,开启 ssl 连接,采用 8883 端口,完成配置。

心得:服务端和客户端的证书,其实是属于同一个维度,他们并没有啥差异。
上面的证书是复用了之前的https访问测试例,他们都需要指定 域名

在mqtt 服务中可能不需要指定 域名TODO: 这里以后有时间再进行验证。

0x06 通过API发布消息

使用场景:云端下发指令到设备端。

6.1 生成访问密钥

在dashboard上生成api key, 得到一组 ak,sk,可用于API调用
http://your ip:18083/#/APIKey

6.2 Rest API

dashboard 服务也提供了 Swagger API接口:
http://your ip:18083/api-docs/index.html

6.3 发布消息

结合上面两个信息,我们可以发布一个消息:

curl -u $ak:$sk http://${your_ip}:18083/api/v5/publish -H "content-type:application/json" -d '{"topic":"dev/device_id/down", "payload":"test"}'

这样就可以了。

关于监控,可参考:EMQX+Prometheus+Grafana:MQTT 数据可视化监控实践

上一篇 下一篇

猜你喜欢

热点阅读