以下是一个完整的 README.md 文档,详细说明了如何运行代码并与 EMQX 交互。请根据你的项目实际情况调整内容。
本项目演示了如何使用 Eclipse Paho MQTT 客户端库与 EMQX Broker 进行交互,包括数据的发送和接收,并通过 RESTful API 查询统计数据。
-
Java 开发环境:
- JDK 8 或更高版本。
- Maven(用于构建和管理依赖)。
-
EMQX Broker:
- 安装并运行 EMQX(默认地址:
tcp://localhost:1883)。 - 默认用户名:
admin,默认密码:public。
- 安装并运行 EMQX(默认地址:
-
其他工具(可选):
- MQTTX 或其他 MQTT 测试工具,用于调试和验证。
# 添加 EMQX 的官方仓库
sudo wget https://repos.emqx.io/emqx-ce/redhat/EMQ-CE.repo -O /etc/yum.repos.d/emqx-ce.repo
# 安装 EMQX
sudo yum install emqx
# 启动 EMQX
emqx start
# 验证是否启动成功
emqx_ctl status- Broker URL:
tcp://localhost:1883 - WebSocket URL:
ws://localhost:8083/mqtt - 管理界面:
http://localhost:18083(默认用户名:admin,密码:public)
git clone https://github.com/your-repo/mqtt-example.git
cd mqtt-example使用 Maven 构建项目:
mvn clean install在代码中,确保 MqttConnectOptions 中的用户名和密码正确:
options.setUserName("admin");
options.setPassword("public".toCharArray());如果 EMQX 使用了自定义认证,请修改为对应的用户名和密码。
运行以下命令启动数据发送程序:
java -cp target/mqtt-example-1.0-SNAPSHOT.jar MqttDataSender该程序会模拟生成随机消息,并发布到 MQTT topic(默认为 test/topic)。
运行以下命令启动数据接收程序:
java -cp target/mqtt-example-1.0-SNAPSHOT.jar MqttDataReceiver该程序会订阅 test/topic,并将接收到的消息存储在内存中,同时启动一个 RESTful API 服务(默认端口:4567)。
数据接收程序启动后,会提供一个 RESTful API 接口,用于查询指定时间范围内的统计数据。
GET /stats?start=<start_time>&end=<end_time>start: 起始时间(单位:分钟,相对于当前时间)。end: 结束时间(单位:分钟,相对于当前时间)。
curl "http://localhost:4567/stats?start=-10&end=0"{
"A": 5,
"B": 3,
"C": 2,
"D": 1
}mqtt-example/
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ ├── MqttDataSender.java # 模拟数据发送程序
│ │ │ ├── MqttDataReceiver.java # 数据接收与统计程序
│ │ └── resources/
├── pom.xml # Maven 配置文件
└── README.md # 说明文档
- 确保 EMQX 已启动并正常运行。
- 检查客户端代码中的
BROKER_URL是否正确。 - 确保防火墙允许通过
1883端口的流量。
- 如果 EMQX 启用了认证插件,请确保客户端代码中的用户名和密码正确。
- 检查 EMQX 的日志文件(通常位于
/var/log/emqx/),查看是否有认证失败的错误信息。
- 确保发布者和订阅者的 topic 名称一致。
- 检查 QoS 设置是否匹配。
通过以上步骤,你可以轻松运行本项目并与 EMQX 进行交互。