项目架构
大约 5 分钟frameworkintro
一、BladeX-Links 项目架构
项目概述
BladeX-Links 是一个Java生态的物联网连接平台,提供了设备连接、数据处理和存储的完整解决方案。该平台支持多种物联网协议,多种时序数据库,并且具有良好的扩展性和可定制性。
架构说明
BladeX-Links 基于 SpringBlade 开发,环境与依赖版本见环境要求。
项目目录结构
BladeX-Links
├── blade-core -- 核心模块
│ ├── blade-links-base -- 基础工具和通用组件
│ ├── blade-links-core -- 核心业务逻辑和功能实现
│ ├── blade-broker-core -- 消息代理核心接口和抽象类
│ ├── blade-broker-local -- 本地消息代理实现
│ ├── blade-broker-cluster -- 集群消息代理实现
│ ├── blade-data-core -- 数据处理核心组件
│ ├── blade-engine-core -- 场景联动与规则处理
│ ├── blade-mq-api -- 消息队列API接口定义
│ ├── blade-mq-kafka -- Kafka消息队列实现
│ ├── blade-tsdb-api -- 时序数据库API接口定义
│ ├── blade-tsdb-influxdb -- InfluxDB时序数据库实现
│ ├── blade-tsdb-influxdb2 -- InfluxDB 2.x时序数据库实现
│ ├── blade-tsdb-iotdb -- Apache IoTDB时序数据库实现
│ ├── blade-tsdb-tdengine -- TDengine时序数据库实现
│ ├── blade-vms-api -- 视频监控接口与模型
│ └── blade-vms-gb28181 -- GB28181 信令与视频业务
├── blade-service -- 业务服务模块
│ ├── blade-broker -- 消息代理服务,处理设备连接和消息路由
│ ├── blade-emqx -- EMQX 认证、授权与消息接入
│ ├── blade-server -- 服务器核心功能,提供API和业务逻辑
│ └── blade-data -- 数据处理服务,负责集群环境的数据存储和分析
├── blade-demo -- 示例和演示模块
│ ├── device-simulator -- 设备模拟器,用于测试和演示
│ ├── relay-mqtt -- MQTT协议中继示例
│ └── relay-amqp -- AMQP协议中继示例
└── script -- 部署和运维脚本项目技术栈说明
基础框架
- Java版本: Java 21
- 核心框架: Spring Boot 4.1.1
- 平台底座: SpringBlade / blade-tool 5.0.2
- 业务序列化: Jackson 2
- 构建工具: Maven 3.x
数据存储与处理
- 关系型数据库:
- MySQL
- 缓存:
- Redis
- 时序数据库:
- InfluxDB (v1.x, v2.x)
- Apache IoTDB 1.3.x
- TDengine 3.x
- ORM框架:
- MyBatis-Plus
消息通信
- MQTT协议:
- mica-mqtt 2.6.13(原生服务端与客户端),或 EMQX 接入
- AMQP协议:
- RabbitMQ Client
- 消息队列:
- Apache Kafka
模板引擎与脚本处理
- 模板引擎:
- Beetl (用于协议转换)
- 脚本引擎:
- Aviator (表达式计算引擎)
- Nashorn (JavaScript引擎)
容器化与部署
- 容器化:
- Docker
- 部署脚本:
- Shell脚本
二、核心模块 (blade-core)
模块说明
核心模块包含了平台的基础功能实现,是整个系统的核心部分。它提供了各种API接口和实现,支持平台的基本功能和扩展能力。
基础模块
- blade-links-base: 提供基础工具类、常量定义、异常处理等通用组件
- blade-links-core: 实现核心业务逻辑,包括设备管理、协议解析等功能
消息代理模块
- blade-broker-core: 定义消息代理的核心接口和抽象类
- blade-broker-local: 实现本地模式的消息代理
- blade-broker-cluster: 实现集群模式的消息代理,支持分布式部署
数据处理模块
- blade-data-core: 数据处理的核心组件,包括数据转换、过滤等功能
规则与视频模块
- blade-engine-core: 场景联动、规则匹配与数据转发
- blade-vms-api: 视频监控接口与数据模型
- blade-vms-gb28181: GB28181 信令、设备接入与视频业务
消息队列模块
- blade-mq-api: 定义消息队列的API接口
- blade-mq-kafka: 实现基于Kafka的消息队列
时序数据库模块
- blade-tsdb-api: 定义时序数据库的API接口
- blade-tsdb-influxdb: 实现InfluxDB时序数据库的连接和操作
- blade-tsdb-influxdb2: 实现InfluxDB 2.x时序数据库的连接和操作
- blade-tsdb-iotdb: 实现Apache IoTDB时序数据库的连接和操作
- blade-tsdb-tdengine: 实现TDengine时序数据库的连接和操作
三、业务服务模块 (blade-service)
服务说明
业务服务模块是平台的具体实现,提供了实际的业务功能和服务接口。这些服务可以独立部署,也可以组合部署,以满足不同的应用场景需求。
- blade-broker: 消息代理服务,负责设备连接和消息路由
- blade-emqx: EMQX 接入服务,提供认证、授权与平台消息对接
- blade-server: 服务器核心功能,提供API接口和业务逻辑处理
- blade-data: 数据处理服务,负责数据存储、查询和分析
四、示例和演示模块 (blade-demo)
示例说明
示例和演示模块提供了一些实际应用的示例,帮助开发者快速理解和使用平台功能。这些示例可以作为开发自定义应用的参考。
- device-simulator: 设备模拟器,用于测试和演示平台功能
- relay-mqtt: MQTT协议中继示例,展示如何处理MQTT协议的消息
- relay-amqp: AMQP协议中继示例,展示如何处理AMQP协议的消息
五、部署架构
平台提供三种接入部署方式,均可使用 Jar 或 Docker 部署:
- 原生单机模式:blade-server 与 blade-broker,数据处理随 broker 运行。
- 原生集群模式:blade-server、blade-broker、Kafka 与 blade-data,设备接入和数据处理分离。
- EMQX 模式:blade-server、EMQX、blade-emqx、Kafka 与 blade-data,由 EMQX 承载 MQTT 连接。
六、扩展性设计
扩展能力
BladeX-Links 采用模块化设计,具有良好的扩展性,可以根据实际需求进行定制和扩展。
- 协议扩展: 通过实现相应接口,可以支持更多物联网协议
- 存储扩展: 通过实现时序数据库API,可以支持更多时序数据库
- 消息队列扩展: 通过实现消息队列API,可以支持更多消息队列系统
扩展注意事项
在进行扩展开发时,需要遵循平台的接口规范和设计原则,确保扩展模块与现有系统的兼容性和稳定性。建议在开发前先阅读相关文档和示例代码。
