项目架构
大约 6 分钟frameworkintro
一、BladeX-Links 项目架构
项目概述
BladeX-Links 是一个Java生态的物联网连接平台,提供了设备连接、数据处理和存储的完整解决方案。该平台支持多种物联网协议,多种时序数据库,并且具有良好的扩展性和可定制性。
运行环境要求
- Java: 17
- NodeJs: 18
- Maven: 3.8+
- MySql: 5.7+
- Redis: 5.0+
- TDengine 3.x
- InfluxDB: 1.8.x+
- IoTDB 1.3.x
Java17与NodeJs18的说明
- 由于采用Java17,Java 模块化系统(Java Module System)的安全限制导致的针对反射等场景有可能会出现如下错误:
Cause: java.lang.reflect.InaccessibleObjectException: Unable to make field protected java.lang.reflect.InvocationHandler java.lang.reflect.Proxy.h accessible: module java.base does not "opens java.lang.reflect" to unnamed module @223aa2f7
- 解决方案:在启动参数中添加
--add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED
- 如:
java --add-opens java.base/java.lang=ALL-UNNAMED -jar your-application.jar
- 如:
- 由于采用NodeJs18,OpenSSL3.0对算法和秘钥大小增加了更为严格的限制,可能会导致安装失败或打包失败出现如下错误:
Error: error:0308010C:digital envelope routines::unsupported
- 解决方案:在ide的终端执行如下命令
- Linux & Mac OS:
export NODE_OPTIONS=--openssl-legacy-provider
- Windows:
set NODE_OPTIONS=--openssl-legacy-provider
- Linux & Mac OS:
项目目录结构
BladeX-Links
├── blade-core -- 核心模块
│ ├── blade-links-base -- 基础工具和通用组件
│ ├── blade-links-core -- 核心业务逻辑和功能实现
│ ├── blade-broker-core -- 消息代理核心接口和抽象类
│ ├── blade-broker-local -- 本地消息代理实现
│ ├── blade-broker-cluster -- 集群消息代理实现
│ ├── blade-data-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-service -- 业务服务模块
│ ├── blade-broker -- 消息代理服务,处理设备连接和消息路由
│ ├── blade-server -- 服务器核心功能,提供API和业务逻辑
│ └── blade-data -- 数据处理服务,负责集群环境的数据存储和分析
├── blade-demo -- 示例和演示模块
│ ├── device-simulator -- 设备模拟器,用于测试和演示
│ ├── relay-mqtt -- MQTT协议中继示例
│ └── relay-amqp -- AMQP协议中继示例
└── script -- 部署和运维脚本
项目技术栈说明
基础框架
- Java版本: Java 17
- 核心框架: Spring Boot 3.x
- 平台框架: BladeX 4.x
- 构建工具: Maven 3.x
数据存储与处理
- 关系型数据库:
- MySQL
- 缓存:
- Redis
- 时序数据库:
- InfluxDB (v1.x, v2.x)
- Apache IoTDB 1.3.2
- TDengine 3.5.1
- ORM框架:
- MyBatis-Plus
消息通信
- MQTT协议:
- Mica MQTT (mqttx-server, mqttx-client)
- 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-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-server: 服务器核心功能,提供API接口和业务逻辑处理
- blade-data: 数据处理服务,负责数据存储、查询和分析
四、示例和演示模块 (blade-demo)
示例说明
示例和演示模块提供了一些实际应用的示例,帮助开发者快速理解和使用平台功能。这些示例可以作为开发自定义应用的参考。
- device-simulator: 设备模拟器,用于测试和演示平台功能
- relay-mqtt: MQTT协议中继示例,展示如何处理MQTT协议的消息
- relay-amqp: AMQP协议中继示例,展示如何处理AMQP协议的消息
五、部署架构
部署模式
BladeX-Links 支持多种部署模式,可以根据实际需求选择合适的部署方式。
- 单机模式: 所有组件部署在同一台服务器上,适合开发和测试环境
- 分布式模式: 各组件分布在不同服务器上,支持高可用和水平扩展
- 容器化部署: 支持使用Docker容器进行部署,提供Dockerfile
推荐部署方式
对于生产环境,推荐使用分布式模式或容器化部署,以提高系统的可用性和可扩展性。对于开发和测试环境,可以使用单机模式简化部署过程。
六、扩展性设计
扩展能力
BladeX-Links 采用模块化设计,具有良好的扩展性,可以根据实际需求进行定制和扩展。
- 协议扩展: 通过实现相应接口,可以支持更多物联网协议
- 存储扩展: 通过实现时序数据库API,可以支持更多时序数据库
- 消息队列扩展: 通过实现消息队列API,可以支持更多消息队列系统
扩展注意事项
在进行扩展开发时,需要遵循平台的接口规范和设计原则,确保扩展模块与现有系统的兼容性和稳定性。建议在开发前先阅读相关文档和示例代码。