MQTT服务器

MQTT开源服务器很多,比如:

  • Mosquitto:Eclipse Mosquitto使用 C 语言实现的 MQTT 服务器
  • EMQX:使用 Erlang 语言开发的 MQTT 服务器,内置强大的规则引擎,支持许多其他 IoT 协议,比如MQTT-SN、CoAP、LwM2M 等。
  • Mosca:使用 Node.JS 开发的 MQTT 服务器,简单易用。
  • VerneMQ:使用 Erlang 开发的 MQTT 服务器。

更多MQTT的本地服务器和云服务器可以参考https://mqtt.org/software/

MQTT Broker

环境搭建

下载EMQX

这里使用的是EMQX,Windows下建议只是用于本地测试,不建议用于生产。

下载地址 https://www.emqx.io/zh/downloads?os=Windows

EMQX Download

解压后如下:

unzip

启动服务

  1. 打开PowerShell,进入bin目录
  2. 启动 EMQX(两种启动方式:emqx start守护进程模式、emqx console控制台模式)
emqx start
  1. 启动成功后,查看节点的运行状态(如返回 pong,则表示运行状态正常)
emqx ping

停止服务

emqx stop

重启服务

emqx restart

效果如下:

service

EMQX默认提供端口(可以在 /emqx/etc/emqx.conf 文件中修改端口号):

EMQX端口 说明
1883 MQTT TCP 协议端口
8883 MQTT/TCP SSL 端口
8083 MQTT/WebSocket 端口
8084 MQTT/WebSocket with SSL 端口
18083 EMQX Dashboard 管理控制台端口

登录EMQX Dashboard

EMQX 启动成功后,可以访问http://127.0.0.1:18083 进入EMQX Dashboard 管理控制台进行设备连接和相关指标监控管理。

初始账号:admin,初始密码:public

dashboard

创建客户端认证

创建数据库

按照下图步骤,创建客户端认证

客户端认证

认证方式:选择Password-Based

认证方式

选择数据库: 并不是用于生产,所以直接用了内置数据库,也可以选择自己喜欢的

choose database

加密方式: 直接用默认就可以了

配置参数

创建用户

选择用户管理

用户管理

添加用户

create user

我们这里创建一个测试用户 user 密码: 123456

create user

MQTT.fx连接测试

MQTT.fx 下载地址: https://softblade.de/en/welcome/

创建连接

点击设置图标

setting

输入Broker Address 和 Port,这里可以用127.0.0.1,如果是固定IP的话,也可以使用固定IP,我自己的IP就是192.168.1.8

User Credentials里面选择Use Username/Password ,输入我们刚才创建的用户user/123456(不是控制台的用户名密码)

image-20230706152343008

点击Apply -> OK

然后点击主界面的connect,如下表示连接成功

mqtt connect

我们在Dashboard可以看到总连接数/在线连接数发生了变化(不需要刷新网页,会自动刷新)

dashboard view

再回到MQTT.fx

我们订阅一个主题: /dev/myproject/topic

image-20230706153246346

主题数和订阅数也同步发生了变化

image-20230706153311779

现在我们利用Publish 发布一条消息,点击Publish按钮

发布测试消息hello world

image-20230706153411161

然后切换到Subscribe页签,可以看到在界面上已经显示了刚才发布的消息

image-20230706153456080

Android连接测试

Demo地址: https://github.com/winstone-su/MqttJava

这里我使用的是雷电模拟器,需要注意的是,这里的IP使用的是我本机的IP 192.168.1.8

//服务器地址(协议+地址+端口号)
public String HOST = "tcp://192.168.1.8:1883";
//用户名
public String USERNAME = "user";
//密码
public String PASSWORD = "123456";
//发布主题
public static String PUBLISH_TOPIC = "/dev/myproject/topic";

在Android端发布一条消息

MyMqttService.publish("这是一条来自Android的消息");

在MQTT.fx中收到消息

image-20230706154758540