您好,欢迎来到品趣旅游知识分享网。
搜索
您的当前位置:首页Emqx的简单使用

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。

但是这个好像只是测试版本,只能有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%-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 以实现与外部系统的集成,例如查询客户端信息、发布消息和创建规则等。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- pqdy.cn 版权所有 赣ICP备2024042791号-6

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务