EMQX的安装及使用

EMQX是基于MQTT的,在学习EMQX之前要对MQTT有一定的了解;

MQTT 可参考  : MQTT的使用-CSDN博客

EMQX的官网:EMQX: The #1 MQTT Platform for IoT, IIoT and Connected Cars

EMQX的安装:

       我使用的是centos7系统,安装文件如下根据自己系统下载:                                                                  https://pan.baidu.com/s/13mpnbj8wZxn6Z5ca2QhIHA?pwd=v6lj 

               安装:[root@docker emqx]# rpm -ivh emqx-centos7-v4.0.5.x86_64.rpm 

               启动:[root@docker emqx]# emqx start

                           EMQ X Broker v4.0.5 is started successfully!
               查看启动状态:[root@docker emqx]# emqx_ctl status
                                         Node 'emqx@127.0.0.1' is started
                                         emqx v4.0.5 is running
                
               EMQX启动成功后登录:http://ip:18083   默认账号/密码: admin/public
 
               常用命令:
                       启动:emqx start
                       关闭:emqx stop
                       重启:emqx restart
            
               EMQX的目录:EMQX的很多功能都需要通过修改配置来实现

EMQX在MQTT的基础上拓展了一些功能:

1、控制台面板

                就是访问上面的18083端口,面板中的菜单建单说明一下:

                1、 ADMIN --> settings   设置控制台的背景色、语言,这里切换成中文;

                2、监控-->控制台  查看运行的EMQX节点信息,连接的客户端、消息发布及订阅的总数

                3、监控-->客户端  当前连接EMQX的客户端列表

                4、监控-->主题  主题和节点对应关系,在EMQX集群中由某些节点负责某些topic的数据转发

                5、监控-->订阅  订阅者订阅的topic以及qos

                6、规则引擎,在规则中可以写sql语句对收集的数据做过滤,在 资源 中将过滤后的数据转发到其他地方(比如业务处理系统),规则引擎在实际操作中经常遇到;

                7、管理-->插件   EMQX自带了的插件都在这里展示,如acl鉴权等,当需要用到对应的插件时在这里启动插件;

                8、管理-->监听器  EMQX常用的监听端口,启动后的端口如下,如果和这个不一样需要考虑端口是不是被占用了                      

                9、工具-->Websocket   客户端模拟工具,可以在这里向EMQX发布订阅消息

                10、工具-->HTTP接口  EMQX提供的方法,可以通过这些方法添加用户、修改密码等

2、认证:

               客户端连接broker时对客户端做的身份认证,包括 username、clientId、http认证等;

               在启用认证之前需要修改 etc/emqx.conf 的 allow_anonymous = true ,如果是false则表示任何客户端都能连接,改为true则表示只能认证成功才能连接,修改配置后需要重启EMQX;

               username认证:在 管理-->插件 菜单中启用 emqx_auth_username 插件,然后调用 工具-->HTTP接口 中提供的接口创建用户,我这里使用vscode新建 text 文件进行调用,创建用户成功后就可以使用创建的用户连接EMQX broker;

                clientId认证:认证流程和username一样,需要启动emqx_auth_clientid插件,每个客户端连接EMQX的时候需要指定唯一的clientId,校验clientId和password正确即可连接,工具-->HTTP接口 也提供了新建clientId的方法;

                http认证:在EMQX的配置文件中制定 http认证的地址(一个外部接口),当这个接口返回200时表示认证成功,否则表示认证失败;

           可以多个认证并存,当返回200并且消息体中没有ignore表示认证通过、返回4xx表示认证失败、返回200但是消息体中有 ignore 表示认证不通过给下一个认证方法认证;

3、MQTT客户端:

                  在我们日常开发中,需要引入对应的客户端才能使用MQTT的功能,这里说一下java的客户端 Eclipse Paho Java 和前端的 客户端 MQTT.js,在代码中有demo,直接参考代码即可;

                  链接:https://pan.baidu.com/s/13NDYwRheAPdYRE9z3CpMcw?pwd=6ndp 
                  修改application.yml中的EMQX 服务端配置,运行 App 中的main即可连接服务端发消息,index.html中通过浏览器打开这个页面实现消息的发送;

4、日志配置:

                   参考文章最后面的课件链接,第二章最后面部分;

5、ACL规则:

                   前面说的认证是基于username、clientId 等客户端的维度进行校验,EMQX还支持在topic的维度允许 生产者、订阅者 生产或订阅数据;

                  规则如下:允许(Allow) / 拒绝(Deny)" "谁(Who)" "订阅(Subscribe) / 发布(Publish)" "主题列表(Topics)"

                  如:{allow, {user, "user1"}, subscribe, ["$SYS/#"]}    允许用户 user1 订阅 $SYS/# 主题

6、WebHook:     

                钩子函数,当客户端向服务端发起请求后,服务端会做出一些响应,可以捕获这些响应做一些操作,如当客户端连接broker成功时调用连接成功的钩子函数记录连接的clientId,断开时删除clientId,这样就可以统计连接broker的客户端数量,不同的钩子函数通过 action 区分;详见课件第三章中的 WebHook;

7、EMQX集群:

                EMQX集群中的每个节点都会与其他节点建立TCP连接,当有新节点加入时也会与其他节点建立连接,只有cookie(etc/emqx.conf中的node.cookie )一致的节点才能建立集群

                 生产者将数据发到集群中的某一个节点,订阅者订阅的是其他节点,为了实现这种场景下的数据传递,EMQX通过一下几个功能实现:

                1、订阅表,在某个节点上维护,记录了所有的订阅者、topic及节点关系

                       node1:
                             topic1 -> client1, client2
                             topic2 -> client3`
                       node2:
                             topic1 -> client4

                 2、路由表,所有节点都会存储一份,生产者发消息过来的时候将消息发到对应的节点
                          topic1 -> node1, node2
                          topic2 -> node3
                          topic3 -> node2, node4

                 3、主题树,所有节点都会存储一份,带通配符的主题匹配,用于推送消息到订阅者

                 具体过程参考课件第三章中的EMQX集群;

8、共享订阅:

           如果生产者发布的消息,在后端有多个应用需要订阅,此时就用到了共享订阅, 共享订阅有两种实现,$share 和 $queue,如下 S1 S2 S3订阅了 $share/g1/topic ,g1表示这三个订阅者在g1分组,topic的消息只会发到这三个节点中的某一个节点(使用随机算法);S4 S5在不同分组,消息也会发到这两个节点中的某一个节点;

            $queue 没有分组的概念,所有的共享节点都会收到一份数据,$queue/topic;

   

9、延迟发布

         需要开启插件 emqx-delay-publish

         格式如下:$delayed/{DelayInterval}/{TopicName} ,DelayInterval表示延迟时间,单位秒;

         当生产者将消息发到 broker 后,broker延迟一段时间将数据发到订阅者端;

10、规则引擎

        EMQX中提供了规则引擎对数据进行过滤,类似SQL语句,topic类似数据库表,clientId及消息体内容类似数据库中的字段;

        使用方法,在控制台 规则引擎-->资源 中创建一个资源,资源类型选择 WebHook 也就是Http接口,填写接口的url等,然后在 规则引擎-->规则 中创建规则并在响应动作中选择创建的资源,这样SQL过滤后的数据就会发到资源中维护的接口中;

        参考课件第五章中的规则引擎;

       EMQX支持单机百万个客户端的连接,能支持多少个客户端同时发送数据跟还要通过压测工具进行测试,压测工具:http://github.com/emqx/emqtt_bench

以上内容全部来源黑马的课程,课程地址:1.介绍_哔哩哔哩_bilibili

课程的课件见:链接:https://pan.baidu.com/s/13mUN_VOvJbzI_HmwkY3GVg?pwd=4rk8 
 

课程都是免费的,黑马良心!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值