update README.md

This commit is contained in:
wt 2025-10-27 17:27:22 +08:00
parent a0f0455e98
commit ebf7e902eb

230
README.md
View File

@ -1,60 +1,202 @@
# Zhitan Gateway
# Zhitan-Gateway 项目简介
Zhitan-Gateway 是一个基于 Java 的网关服务,主要功能是接收 MQTT 协议的数据,并将这些数据写入时间序列数据库 InfluxDB 或关系型数据库中。该项目适用于物联网IoT场景下的数据采集和处理。
基于 Spring Boot 的物联网 MQTT 数据网关,用于接收电力监测设备数据并存储至 InfluxDB 时序数据库。
## 技术栈
- Spring Boot
- MQTT
- InfluxDB
- MyBatis Plus
- **Spring Boot 2.6.15** - 应用框架
- **Spring Integration MQTT** - MQTT 消息集成
- **InfluxDB 6.6.0** - 时序数据库
- **MyBatis Plus 3.5.6** - ORM 框架
- **PostgreSQL** - 关系数据库
- **Redis** - 缓存中间件
- **Druid 1.2.20** - 数据库连接池
- **Undertow** - 嵌入式服务器
## 核心功能
- MQTT 消息订阅与实时接收
- 电力数据 JSON 解析与转换
- 点位模板映射(支持 Redis 缓存)
- InfluxDB 时序数据批量写入
- Druid 连接池监控
## 项目结构
```
src/main/java/com/zhitan/
├── config/
│ ├── influxdb/ # InfluxDB 配置
│ ├── mqtt/ # MQTT 客户端配置
│ ├── mybatis/ # MyBatis Plus 配置
│ ├── redis/ # Redis 配置
│ └── DruidConfig.java # Druid 数据源配置
├── handler/
│ └── MqttMessageHandler.java # MQTT 消息处理器
├── influxdb/
│ └── InfluxdbRepository.java # InfluxDB 数据操作
├── mapper/
│ └── CommonMapper.java # 数据访问接口
├── model/
│ ├── entity/ElectricPower.java # 电力数据实体
│ └── IndexTemplate.java # 点位模板
├── redis/
│ └── RedisCache.java # Redis 缓存工具
├── service/
│ └── impl/DataServiceImpl.java # 数据处理服务
└── MQTTGatewayApplication.java # 启动类
```
## 快速开始
### 环境要求
- JDK 8+
- Maven 3.6+
- MQTT Broker
- InfluxDB 2.x
- PostgreSQL
- Redis
- Druid 数据库连接池
## 主要功能
- 通过 MQTT 协议接收数据并进行处理。
- 支持将数据写入 InfluxDB 或其他数据库。
- 配置 Druid 数据库连接池以管理主从数据库连接。
- 提供 Redis 缓存服务以提升数据处理效率。
### 配置文件
## 模块说明
- `MQTTGatewayApplication.java`Spring Boot 启动类。
- `MqttConfig.java``MqttInboundConfig.java`:负责 MQTT 的连接和消息接收配置。
- `InfluxdbConfig.java``InfluxdbRepository.java`:负责 InfluxDB 的连接和数据写入。
- `DataServiceImpl.java`:实现数据处理逻辑,包括接收 MQTT 消息并写入数据库。
- `DruidConfig.java``DruidProperties.java`:配置 Druid 数据库连接池。
- `RedisConfig.java``RedisCache.java`:配置 Redis 缓存并提供缓存操作方法。
- `MyBatisPlusConfig.java`:配置 MyBatis Plus 的拦截器。
编辑 `application-dev.yml`
## 使用说明
### 配置
确保在 `application.yml``application-dev.yml` 中配置以下内容:
- MQTT 服务器连接信息broker-url, username, password
- InfluxDB 连接参数host, org, bucket, token
- Redis 配置信息
- Druid 数据源配置
```yaml
spring:
datasource:
druid:
master:
url: jdbc:postgresql://localhost:5432/energy
username: postgres
password: postgres
mqtt:
client-id: your-client-id
broker-url: tcp://broker.emqx.io
username:
password:
default-topic: zhitan
timeout: 30
keep-alive: 60
redis:
host: localhost
port: 6379
password:
### 启动
运行 `MQTTGatewayApplication.java` 中的 `main` 方法启动服务。
influxdb:
host: http://localhost:8086
org: your-org
bucket: your-bucket
token: your-token
measurement: data
enable: true
```
### 数据处理
当 MQTT 消息到达时,`MqttInboundConfig` 会监听指定的 Topic并通过 `MqttMessageHandler` 处理数据。数据将根据配置写入 InfluxDB 或其他数据库。
### 启动应用
## 依赖管理
使用 Maven 进行依赖管理,核心依赖包括:
- Spring Boot Starter
- MQTT 支持库
- InfluxDB Java 客户端
- MyBatis Plus
- Druid 数据库连接池
- Redis 客户端
```bash
# 编译
mvn clean compile
# 运行
mvn spring-boot:run
# 打包
mvn clean package
java -jar target/MQTTGateway.jar
```
## 数据格式
### MQTT 消息示例
```json
{
"SN": "device001",
"Pt": 2250.5,
"Ua": 220.1,
"Ub": 221.3,
"Uc": 219.8,
"Ia": 10.2,
"Ib": 10.5,
"Ic": 10.1,
"Pw": 2250.0,
"Pwa": 750.0,
"Pwb": 750.0,
"Pwc": 750.0,
"Time": "2024-01-01 12:00:00",
"Type": 1
}
```
### 支持的电力参数
- **电压**: Ua, Ub, Uc (相电压), Uab, Ubc, Uca (线电压)
- **电流**: Ia, Ib, Ic
- **功率**: Pt (总功率), Pw/Pwa/Pwb/Pwc (有功功率), Pq/Pqa/Pqb/Pqc (无功功率)
- **电量**: Q, Qa, Qb, Qc
## 数据流程
```
MQTT Broker → MqttInboundConfig → MqttMessageHandler
→ DataServiceImpl → IndexTemplate 映射 → InfluxDB
Redis 缓存
```
1. 订阅 MQTT Topic 接收消息
2. 解析 JSON 为 ElectricPower 对象
3. 从数据库/缓存获取点位模板
4. 映射字段并转换为 InfluxDB Point
5. 批量写入时序数据库
## 监控管理
### Druid 监控
访问: `http://localhost:8080/druid/`
- 用户名: `admin`
- 密码: `123456`
### 日志配置
```yaml
logging:
level:
com.zhitan: debug
org.springframework: warn
```
## 部署
### Docker 部署
```bash
# 构建镜像
docker build -t zhitan-gateway .
# 运行容器
docker run -d \
-p 8080:8080 \
-e MQTT_BROKER=tcp://mqtt-broker:1883 \
-e INFLUXDB_HOST=http://influxdb:8086 \
zhitan-gateway
```
### 生产环境建议
- 调整日志级别为 INFO
- 配置 MQTT 自动重连
- 启用 InfluxDB 批量写入
- 设置 Redis 缓存过期时间
- 配置 Druid 连接池参数
## 许可证
本项目遵循 MIT 许可证,详见 [LICENSE](LICENSE) 文件。
Apache-2.0 License
## 注意事项
- 本项目需要依赖 MQTT Broker 和 InfluxDB/MySQL 等数据库,请确保相关服务已启动。
- 配置文件中需根据实际环境修改配置,特别是数据库和 MQTT 的连接参数。
如需进一步了解,请查阅源码或联系项目维护者。