环境要求
大约 3 分钟frameworkintro
MQTT消息服务器选择
- emqx 功能更加丰富,如果对 mqtt 5.0 或者需要 Session 保留请选择 Emqx 插件版。
- emqx 原生支持集群对 kafka 的压力也更小。blade-broker 则是 java 版,部署更加容易,特别是一些信创环境。
序号 | 功能 | emqx | bladex(mqtt-broker) |
---|---|---|---|
1 | 技术栈 | 基于Erlang实现,适合高并发低延迟场景 | 基于Java实现,生态成熟开发门槛低 |
2 | 部署与扩展性 | 依赖Erlang运行时,需特定环境部署 | 轻量级,源码可无缝集成Spring Boot/Cloud,扩展开发便捷 |
3 | Session 保留 | 支持,默认2小时,支持离线和延迟消息 | 不支持,离线会立即清除 |
4 | MQTT 5.0 支持 | 完整的MQTT 5.0功能支持 | 仅协议层面支持 |
5 | MQTT-SN、CoAP、LwM2M 协议 | 原生支持 | 不支持,需结合Node-RED实现 |
6 | 规则引擎 | 开源版支持转发到HTTP服务和MQTT | 不支持,需结合Node-RED实现 |
运行环境要求
- 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-broker-core -- 消息代理核心接口和抽象类
│ ├── blade-broker-local -- 本地消息代理实现
│ ├── blade-broker-cluster -- 集群消息代理实现
│ ├── blade-data-core -- 数据处理核心组件
│ ├── blade-links-base -- 基础工具和通用组件
│ ├── blade-links-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-data -- 消息处理服务,处理设备数据存储和分析
│ ├── blade-emqx -- emqx消息代理服务,处理设备连接和消息路由
│ ├── blade-server -- 服务器核心功能,提供API和业务逻辑
│ └── blade-data -- 数据处理服务,负责集群环境的数据存储和分析
├── blade-demo -- 示例和演示模块
│ ├── device-simulator -- 设备模拟器,用于测试和演示
│ ├── relay-mqtt -- MQTT协议中继示例
│ └── relay-amqp -- AMQP协议中继示例
└── script -- 部署和运维脚本