Emqx的简单使用

Emqx 是一个mqtt 的服务器产品。之前activemq可以作为mqtt协议的服务器,但是功能相对来说比较单一。Emqx作为跟Mqtt协议相关的新一代产品,功能实际上更为强大。

它的功能也主要体现在可视化/认证/规则/httpApi 上面。

1.Emqx 的安装

这里采用了docker 安装,作为dev 的单机版,使用docker 安装是比较快速的。

docker pull emqx/emqx:5.0.21
docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx:5.0.21

上述的命令 启动了一个私有化的emqx,
emqx的后台是:http://localhost:18083 账户密码是admin/public。

使用 1883 端口的 TCP 类型监听器
使用 8883 端口的 SSL/TLS 安全连接类型监听器
使用 8083 端口的 WebSocket 类型监听器
使用 8084 端口的 WebSocket 安全类型监听器

但是这个好像只是测试版本,只能有10条链接。

在这里插入图片描述

2.可视化功能

可视化功能主要在 主题/订阅/客户端 这里,这个倒是很常见,任何一个具有后台管理功能的都会有这些东西.

在这里插入图片描述

3.认证

mqtt协议里面 有用户名和密码或者认证的body块.

刚刚安装好的emqx 是可以匿名连接上的.这是基于如下的这个设置.
在这里插入图片描述


刚刚安装好的emqx,也可以匿名直接发布消息和订阅的.这是基于这个配置.

在这里插入图片描述

它里面的配置如下:

%% 允许 "dashboard" 用户 订阅 "$SYS/#" 主题

{allow, {user, "dashboard"}, subscribe, ["$SYS/#"]}.

%% 允许 IP 地址为 "127.0.0.1" 的用户 发布/订阅 "#SYS/#","#" 主题

{allow, {ipaddr, "127.0.0.1"}, pubsub, ["$SYS/#", "#"]}.

%% 拒绝 "所有用户" 订阅 "$SYS/#" "#" 主题

{deny, all, subscribe, ["$SYS/#", {eq, "#"}]}.

%% 允许其它任意的发布订阅操作

{allow, all}.

具体的可以看:https://docs.emqx.com/zh/enterprise/v4.4/modules/internal_acl.html#%E5%AE%9A%E4%B9%89-acl

这里的配置 从上到下,匹配哪个就算哪个,不再继续往下匹配.

所以这里明显意思就是,基本上都可以订阅和发布,但是对于 系统配置的主题 作了严格的限制,只允许本机发布,和用户为dashboard的进行订阅.


那么如果我们将刚才的匿名链接改成false, 内置访问控制不变.那就意味着必须有用户才能连上,连上后可以随意订阅和发布(当然$SYS除外)

但此时出现了一个问题,既然是非匿名,那么用户名密码放哪里?可以放在mysql里面,我们添加个mysqk的控制访问.这个mysql控制访问是比上面的内置访问控制 要功能多一点,也可以两者一起使用.

在这里插入图片描述

我们需要在一个mysql里面存放一个用户名密码表,也就是认证表

CREATE TABLE `mqtt_user` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(100) DEFAULT NULL,
  `password` varchar(100) DEFAULT NULL,
  `salt` varchar(35) DEFAULT NULL,
  `is_superuser` tinyint(1) DEFAULT 0,
  `created` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `mqtt_username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

然后配置下,参考链接:https://docs.emqx.com/zh/enterprise/v4.4/modules/mysql_authentication.html#%E5%88%9B%E5%BB%BA%E6%A8%A1%E5%9D%97

在这里插入图片描述

注意上述图片中的认证语句就是我们存用户名密码表的查询语句。

注意上述图片中的访问控制SQL查询语句,实际上是可以代替上面的内置访问控制

在完成上述操作后,在数据库里面添加用户名密码,那么就只有用户名和密码的才能够链接上。


注意这个只是用户名密码的认证方式,在emqx里面有很多的认证方式,请自行查阅使用。

4规则

在使用activemq或者其他mq时候,作为消费者,接到复杂消息 需要进行判断处理。

这里的emqx 做了进一步的处理链路,可以判断消息是什么样的,然后根据判断条件 做出相关的操作。
比如说:

  • 如果消息里面的数据包含type=aaa,那么将此消息通过http发送到http://localhost:8080/aaa 上
  • 如果消息里面的数据 age > 10 ,那么将此消息 同步到 一个kafka 上面。
  • 如果某个主题 被链接上了,那么将客户端的一些数据保存到mysql上面
    ok,这个就是一个路由功能。

在这里插入图片描述

上述就是 监听t/# 主题 只要链接上,就执行一条插入语句。
这个规则学习可以查看一个B站视频:https://www.bilibili.com/video/BV19T4y1w7Nj?t=5.3

5http Api

EMQX 提供了 HTTP API 以实现与外部系统的集成,例如查询客户端信息、发布消息和创建规则等。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值