MQTT跃跃欲试

1.EMQ X

官网地址:https://www.emqx.io/cn/

在上篇 MQTT初入门 中介绍了MQTT,列出了 eclipse-mosquitto 实现MQTT后对外提供的服务产生的一些问题,后面又找了一个MQTT的开源实现 EMQ X,EMQ X解决了mosquitto的问题,而且有中文文档

MQTT只是一个网络协议,需要一个消息中间件,目前比较有名的有Mosquitto,Apollo,RabbitMQ,Emqx等,本篇使用Emqx,使用的是docker emqx 镜像

EMQ X R3.2 (Erlang/Enterprise/Elastic MQTT Broker) 是基于 Erlang/OTP 语言平台开发,支持大规模连接和分布式集群,发布订阅模式的开源 MQTT 消息服务器,文档地址:https://docs.emqx.io/docs/broker/v3/cn/

EMQ X 消息服务器完整支持 MQTT V3.1/V3.1.1/V5.0 版本协议规范,并扩展支持 MQTT-SN 、WebSocket、CoAP、LwM2M、Stomp 以及私有 TCP/UDP 协议。EMQ X 消息服务器支持单节点100万连接与多节点分布式集群。为大规模设备连接 (C1000K+) 的物联网、车联网、智能硬件、移动推送、移动消息等应用,提供完全开放源码、安装部署简便、企业级稳定可靠、可弹性扩展、易于定制开发的 MQTT 消息服务器。

在这里插入图片描述

2.使用docker安装 EMQ X

匿名模式运行emqx,没有认证,任何人都能访问

docker run -it -d --name emqx -p 18083:18083 -p 1883:1883 -p 8083:8083 emqx/emqx:latest
# -it 运行为容器后可以进入容器
# -d 后台启动
# --name 容器的名称为 emqx
# -p 宿主机的端口与容器的端口进行绑定,18083为emqx dashboard控制台,1883为emqx tcp协议地址,8083为emqx websocket地址 

容器启动后,在浏览器访问 dashboard控制台: http://127.0.0.1:18083,默认用户名: admin,密码:public
在这里插入图片描述

3.浏览器websocket测试

emqx dashboard自动websocket工具,输入用户名和密码,点击连接,可看到当前状态:已连接
在这里插入图片描述
下面有订阅和发布,订阅一个主题,然后向该主题发布消息,可看到订阅成功和发布成功的提示,下面有收到订阅消息的时间

在这里插入图片描述

4.android app测试

MQTT的客户端有 Eclipse Paho: https://www.eclipse.org/paho/
Paho的android库是:https://github.com/eclipse/paho.mqtt.android
在Gradle中引入paho sdk,写上连接MQTT服务的代码,然后打包到android手机上

repositories {
    maven {
        url "https://repo.eclipse.org/content/repositories/paho-snapshots/"
    }
}
dependencies {
    compile 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0'
    compile 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'
}

#其余代码部分就省略了

运行效果如下:
在这里插入图片描述
向352019040642849主题发送消息:zhi lian gu
在这里插入图片描述
app收到了发布的消息
在这里插入图片描述

5.使用认证模式访问MQTT 提升安全性

上面的emqx默认是 匿名模式启动的,任何人都能访问,在开发、测试环境时可以使用,但到正式环境则会有安全性问题,下面简要谈谈怎么开启Username认证模式,只有认证的用户可连接MQTT,具体可以参考 emqx 官方文档—>配置说明章节

allow_anonymous默认等于true,默认是匿名模式,通过启动参数配置为false,关闭匿名模式
emqx的认证是通过plugins插件实现的,可通过启用插件,来实现认证,启用 emqx_auth_username 插件

新的启动命令如下:

docker run -it -d --rm --name emqx -p 18083:18083 -p 1883:1883 -p 8083:8083 \
-e EMQX_ALLOW_ANONYMOUS=false \
-e EMQX_LOADED_PLUGINS="emqx_auth_username,emqx_management,emqx_dashboard" \
emqx/emqx:latest

运行为容器后,进入emqx容器:docker exec -it emqx sh

#使用emqx_ctl 命令添加test用户,密码为test123
emqx_ctl users add test test123

#下面命令是操作用户的
emqx_ctl users
emqx_ctl users list
emqx_ctl users add <Username> <Password>
emqx_ctl users update <Username> <NewPassword>
emqx_ctl users del <Username>

然后就可以使用 test test123连接 mqtt 服务了

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页