EMQ服务器学习1 mqtt的基础理论知识

最近有时间,研究了一下mqtt消息推送的技术,这个技术在我们的项目中也用到了,但是对于其原理不是很理解,花时间学习了一下。

EMQ官方地址:https://www.emqx.io

1.mqtt服务器的安装

服务器下载地址:https://github.com/emqx/emqx/releases或者emqx.io

注意:mq服务器有企业版和broker版本,选择broker版本进行下载。

我下载的事Windows版本的服务器。下载完成之后将zip文件进行解压

在bin目录下:打开cmd窗口  执行命令 emqx start 启动服务

2.功能简介

mqtt是为移动互联网,互联网设计的轻量级发布订阅模式消息服务器

mqtt服务器启动之后,任何设备终端都可以以通过mqtt协议连接到服务器。通过发布订阅进行消息的交换。

mqtt提供了很多客户端:https://github.com/mqtt/mqtt.github.io/wiki/libraries

此次学习我采用的Java客户端和mqtt的dashboard界面工具结合进行消息推送接受的测试。

2.1认证,访问控制

  1. 连接认证EMQ X 校验每个连接上的客户端是否具有接入系统的权限,若没有则会断开该连接
  2. 访问控制EMQ X 校验客户端每个 发布(Publish)/订阅(Subscribe) 的权限,以 允许/拒绝 相应操作

2.1.1

认证:

EMQ X 消息服务器认证由一系列认证插件(Plugins)提供,系统支持按用户名密码、ClientID 或匿名认证。

系统默认开启匿名认证(Anonymous),通过加载认证插件可开启的多个认证模块组成认证链:

2.1.2

访问控制:

EMQ X 消息服务器通过 ACL(Access Control List) 实现 MQTT 客户端访问控制。

ACL 访问控制规则定义:

允许(Allow)|拒绝(Deny) 谁(Who) 订阅(Subscribe)|发布(Publish) 主题列表(Topics)

MQTT 客户端发起订阅/发布请求时,EMQ X 消息服务器的访问控制模块会逐条匹配 ACL 规则,直到匹配成功为止

具体的配置参阅官方文档:https://docs.emqx.io/broker/v3/cn/guide.html

2.2共享订阅

支持多种消息派发策略

共享订阅支持两种使用方式:

订阅前缀使用示例
$queue/mosquitto_sub -t ‘$queue/topic’
$share/<group>/mosquitto_sub -t ‘$share/group/topic’

目前支持的策略

策略说明
random在所有共享订阅者中随机
round_robin按订阅顺序
sticky使用上次派发的订阅者
hash根据发送者的 ClientId

桥接 的概念是 EMQ X 支持将自身某类主题的消息通过某种方式转发到另一个 MQTT Broker。

桥接 与 集群 的不同在于:桥接不会复制主题树与路由表,只根据桥接规则转发 MQTT 消息。

目前 EMQ X 支持的桥接方式有:

  • RPC 桥接:RPC 桥接只能在 EMQ X Broker 间使用,且不支持订阅远程节点的主题去同步数据
  • MQTT 桥接:MQTT 桥接同时支持转发和通过订阅主题来实现数据同步两种方式

其概念如下图所示

此外 EMQ X 消息服务器支持多节点桥接模式互联:

具体配置参考文档

2.3 htpp发布接口

EMqX消息服务器提供了一个HTTP发布接口,应用服务器可以通过该发布接口发布mqtt消息:

HTTP POST http://host:8080/api/v3/mqtt/publish

HTTP 接口参数:

参数说明
client_idMQTT 客户端 ID
qosQoS: 0 | 1 | 2
retainRetain: true | false
topic主题(Topic)
payload消息载荷

注解

HTTP 发布接口采用 Basic 认证。上例中的 user 和 password 是来自于 Dashboard 下的 Applications 内的 AppId 和密码

2.4MQTT WebSocket 连接

Web 浏览器可直接通过 WebSocket 连接至服务器:

WebSocket URI:ws(s)://host:8083/mqtt
Sec-WebSocket-Protocol:‘mqttv3.1’ or ‘mqttv3.1.1’

 

Dashboard 插件提供了一个 MQTT WebSocket 连接的测试页面:

http://127.0.0.1:18083/#/websocket

我后面的最开始和客户端的测试也是通过websocket进行消息的推送和接受的 测试。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值