启动后端(EMQX模式)
大约 10 分钟quickstartcode
一、准备工作
- 导入git私服的 BladeX-Links 工程并点击
maven刷新按钮下载依赖- 后端核心依赖工程:blade-tool
- 如需拓展开发核心依赖工程,开发完毕后在
blade-tool工程根目录执行mvn clean install命令便可刷新依赖 - 物联网平台基于 SpringBlade 底座开发,环境要求见环境要求
- 特别详细的步骤,请看框架手册
二、启动消息服务kafka
- 为了提高平台性能并支持集群模式,emqx需要搭配kafka插件使用
- kafka推荐使用3.9.x版本,开源版下载地址:kafka
- 本文档以docker为例,若需要使用本地安装的kafka,请自行参考官网文档修改配置
- 创建一个kafka的挂载目录,比如
/docker/data/kafka - 启动kafka服务,注意⚠️:把命令行中的ip改为开发机ip,这样后续才能让宿主机与docker容器之间互通
docker run -d \ --name kafka \ -p 9092:9092 \ -p 9093:9093 \ -e KAFKA_CFG_NODE_ID=1 \ -e KAFKA_CFG_PROCESS_ROLES=controller,broker \ -e KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093 \ -e KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://192.168.0.1:9092 \ -e KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT \ -e KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@192.168.0.1:9093 \ -e KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER \ -e ALLOW_PLAINTEXT_LISTENER=yes \ -v /docker/data/kafka:/data \ bitnami/kafka:3.9.0
三、启动Emqx服务并安装kafka插件
- emqx推荐使用5.8.x版本,开源版下载地址:emqx
- 本文档以docker为例,若需要使用本地安装的emqx,请自行参考官网文档修改配置
- 创建一个emqx的挂载目录,比如
/docker/data/emqx - 启动emqx服务,注意⚠️:emqx需要搭配kafka插件使用,kafka的地址需要在命令中通过环境变量
KAFKA_ENDPOINTS指定docker run -d --name emqx \ -p 1883:1883 \ -p 8083:8083 \ -p 8084:8084 \ -p 8883:8883 \ -p 18083:18083 \ -e KAFKA_ENDPOINTS=192.168.0.1:9092 \ -v /docker/data/emqx/data:/opt/emqx/data \ -v /docker/data/emqx/log:/opt/emqx/log \ emqx/emqx:5.8.6 - 执行命令进入emqx服务
docker exec -it emqx /bin/bash - 进入到emqx服务后执行如下命令
emqx ctl plugins allow emqx_links_pro_plugin-1.1.0 - 完整命令如下
⋊> ~/d/emqx docker exec -it emqx /bin/bash 22:16:01 emqx@b827420053f2:/opt/emqx$ emqx ctl plugins allow emqx_links_pro_plugin-1.1.0 { "result" : "ok", "name_vsn" : "emqx_links_pro_plugin-1.1.0", "action" : "do_allow_installation" } emqx@b827420053f2:/opt/emqx$ - 下载kafka插件部署包,选择对应的平台架构,地址如下(也可以针对源码自行编译):emqx_links_pro_plugin
- 进入emqx控制台,默认账号密码为 admin/public :http://localhost:18083/
- 进入[管理->插件拓展->插件->安装插件]上传kafka插件安装包并启动

- docker查看emqx日志,若为如下日志则说明插件安装成功
⋊> ~/d/emqx docker logs -f emqx EMQX_RPC__PORT_DISCOVERY [rpc.port_discovery]: manual EMQX_NODE__NAME [node.name]: emqx@172.17.0.9 Listener tcp:default on 0.0.0.0:1883 started. Listener ssl:default on 0.0.0.0:8883 started. Listener ws:default on 0.0.0.0:8083 started. Listener wss:default on 0.0.0.0:8084 started. Listener http:dashboard on :18083 started. EMQX 5.8.6 is running now! Init emqx kafka Config #{plugin_kafka => #{}} Init emqx kafka BootstrapHosts [{"192.168.0.1",9092}] kafka_consume started KafkaTopics: [<<"blade_links_msg_down">>, <<"blade_links_kick_out">>, <<"blade_links_acl_clean">>]
四、配置Emqx的客户端认证与授权
1. 客户端认证
- 登录 emqx 管理平台,进入
访问控制->客户端认证菜单。 - 点击右上角创建,
认证方式选择Password-Based-> 下一步 ->数据源选择Http 服务 - 请求方式 选择
POST,URL添加http://192.168.0.1:8888/blade-broker/emqx/authn(ip端口请按实际情况填写) - 在请求体中填入下面
json模板:{ "clientId": "${clientid}", "password": "${password}", "username": "${username}", "peerHost": "${peerhost}" }
2. 客户端授权(Topic 授权)
- 登录 emqx 管理平台,进入
访问控制->客户端授权菜单。 - 点击右上角创建
数据源选择Http 服务 - 请求方式 选择
POST,URL添加http://192.168.0.1:8888/blade-broker/emqx/authz(ip端口请按实际情况填写) - 在请求体中填入下面
json模板:{ "clientId": "${clientid}", "username": "${username}", "topic": "${topic}", "action": "${action}" }
3. 操作步骤
提示
http接口的地址按照实际情况填写,若emqx使用docker启动,请填成宿主机的ip,否则127.0.0.1只会访问docker内部的ip,无法认证通过

五、启动MQTT服务 blade-emqx
前往
BladeX-Links工程下的blade-emqx模块的application.yml配置文件,修改密钥保持与blade-server一致- 具体路径如下:
BladeX-Links/blade-service/blade-emqx/src/main/resources/application.yml - 需要修改的配置如下
(展示的为默认配置,实际情况请修改为自行设置的签名):
#blade配置 blade: token: #使用 @org.springblade.test.SignKeyGenerator 获取 #需要将blade-server与blade-broker服务对应的sign-key配置保持一致 sign-key: 6klRvnw*************0TB4m51ZSh- 具体路径如下:
前往
BladeX-Links工程下的blade-emqx模块的application-dev.yml配置文件,修改kafka配置,若集群有多个节点则以逗号分隔#kafka配置 spring: kafka: bootstrap-servers: 192.168.0.1:9092前往
BladeX-Links工程下的blade-emqx模块的application-dev.yml配置文件,修改mqtt、database、redis、minio等配置- 具体路径如下:
BladeX-Links/blade-service/blade-emqx/src/main/resources/application-dev.yml - 需要修改的配置如下
(展示的为默认配置,实际情况请修改为自行设置的ip、端口、用户名、密码等配置):
提示
- emqx的密钥请提前访问
emqx控制台创建,具体路径为系统设置->api密钥,默认地址为:http://localhost:18083/#/api-key - mqtt帐号名密码请访问
bladex物联网平台,具体路径为mqtt管理->mqtt账号,bladexiot已默认配置在数据库中可直接使用,生产环境建议提前变更 - 注意⚠️:
emqx.api.api-key与emqx.api.secret-key需要与emqx控制台创建的api密钥保持一致,否则系统启动后emqx认证将直接失效
#数据源配置 spring: data: redis: ##redis 单机环境配置 host: 192.168.0.1 port: 6379 password: database: 0 ssl: enabled: false ##redis 集群环境配置 #cluster: # nodes: 127.0.0.1:7001,127.0.0.1:7002,127.0.0.1:7003 # commandTimeout: 5000 datasource: url: jdbc:mysql://192.168.0.1:3306/bladex_iot?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8 username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver kafka: bootstrap-servers: 192.168.0.1:9092 #blade配置 blade: iot: # 外网ip或者域名 mqtt-ip: 192.168.0.1 # 外网可用的端口 mqtt-port: 1883 #emqx mqtt相关配置 emqx: api: # emqx api 地址 base-url: http://192.168.0.1:18083 # api key,emqx平台 [系统设置->api密钥] 菜单创建 api-key: "ee26b0dd4af7e749" # api 密钥,emqx平台 [系统设置->api密钥] 菜单创建 secret-key: "u7qf2hiDPN6WOFsLxgfnvNG7n20y4qCsOdqFjAiZMoH" mqtt: # emqx mqtt 内网 ip host: 192.168.0.1 # emqx mqtt 端口 port: 1883 # 客户端id,注意不要冲突,如果是集群,各个实例请配置不同的id client-id: blade_emqx # mqtt用户名 bladex平台 [mqtt管理->mqtt账号] 菜单创建 username: "bladexiot" # mqtt密码 bladex平台 [mqtt管理->mqtt账号] 菜单创建 password: "bladexiot"- 具体路径如下:
启动
BladeX-Links工程下的blade-emqx模块的EmqApplication启动类,日志出现Started EmqApplication即表示服务启动完成。启动流程如下,启动成功后刷新emqx控制台,认证服务提示已连接则说明对接完毕
提示
启动过程中开始可能会提示mqtt连接断开,这是正常情况,因为那时候还需要和emqx进行认证连接,等后续自动重连的时候提示连接成功就算成功了

系统界面3
六、启动后端系统服务 blade-server
- 前往
BladeX-Links工程下的blade-server模块的application.yml配置文件,修改密钥保持与blade-broker一致- 具体路径如下:
BladeX-Links/blade-service/blade-server/src/main/resources/application.yml - 需要修改的配置如下
(展示的为默认配置,实际情况请修改为自行设置的签名):
#blade配置 blade: auth: #使用 @org.springblade.test.Sm2KeyGenerator 获取,用于国密sm2验签,需和前端保持一致 public-key: 041cb889cccf335fcde7******************************3f5ac2b3542bbb903d84c07636550e8fe599aae4aef53a91cb77cbb1 #使用 @org.springblade.test.Sm2KeyGenerator 获取,用于国密sm2解密,前端无需配置 private-key: 73e345f2edfdf84b6***************88be564defa94c18515a7ccde602463 token: #注意需要和blade-broker服务的sign-key保持一致 #使用 @org.springblade.test.SignKeyGenerator 获取 sign-key: 6klRvnw*************0TB4m51ZSh- 具体路径如下:
BladeX-Links-UI/src/config/website.ts - 需要修改的配置如下
(展示的为默认配置,实际情况请修改为自行设置的签名):
auth: { // 使用 @org.springblade.test.Sm2KeyGenerator 获取,用于国密sm2验签,需和后端保持一致 publicKey: '041cb889cccf335fcde7******************************3f5ac2b3542bbb903d84c07636550e8fe599aae4aef53a91cb77cbb1', } - 具体路径如下:
- 前往
BladeX-Links工程下的blade-server模块的application-dev.yml配置文件,修改数据库、redis、influxdb、minio等配置- 具体路径如下:
BladeX-Links/blade-service/blade-server/src/main/resources/application-dev.yml - 需要修改的配置如下
(展示的为默认配置,实际情况请修改为自行设置的ip、端口、用户名、密码等配置):
#数据源配置 spring: data: redis: ##redis 单机环境配置 host: 192.168.0.1 port: 6379 password: database: 0 ssl: enabled: false ##redis 集群环境配置 #cluster: # nodes: 127.0.0.1:7001,127.0.0.1:7002,127.0.0.1:7003 # commandTimeout: 5000 datasource: url: jdbc:mysql://localhost:3306/bladex_iot?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8 username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver #时序数据库配置 tdengine: enabled: true # 是否开启,多个时序库插件依赖同时导入可采用此参数配置,开启的时序库 username: root password: taosdata database: links # 库名,会自动建库 jdbc-url: jdbc:TAOS-RS://192.168.0.1:6041?useSSL=false # 数据精度,默认:毫秒 precision: ms # 数据保存的天数,默认:10年 keep: 3650 # 批量写入相关配置 enable-batch: true # 开启批量写,默认:开 batch-size: 1000 # 批次大小,默认:1000 flush-duration: 1s # 批次写入时间,默认:1s 写入一次 # 连接池相关配置,可按需求进行配置,建议改大一些 initial-size: 8 # 初始化的连接数,默认:8 max-active: 32 # 最大活跃连接数,默认:32 min-idle: 8 # 最小活跃连接数,默认:8 max-wait: -1 # 最大等待时间,默认:-1 不限制 #oss配置 oss: enabled: true name: minio tenant-mode: true endpoint: http://192.168.0.1:9000 access-key: bladexadmin secret-key: bladexadmin bucket-name: bladex #iot配置 blade: iot: # 外网ip或者域名 mqtt-ip: 192.168.0.1 # 外网可用的端口 mqtt-port: 1883 # broker服务ip或域名 broker-ip: ${blade.iot.mqtt-ip} # broker服务端口 broker-port: 8888 - 具体路径如下:
- 启动
BladeX-Links工程下的blade-server模块的ServerApplication启动类,日志出现Started ServerApplication即表示服务启动完成。
七、启动数据流转服务 blade-data
- 由于
blade-data为数据流转服务,暂时不对外公开API接口,所以无需配置sign-key - 前往
BladeX-Links工程下的blade-data模块的application-dev.yml配置文件,修改kafka配置,若集群有多个节点则以逗号分隔#kafka配置 spring: kafka: bootstrap-servers: 192.168.0.1:9092 - 前往
BladeX-Links工程下的blade-data模块的application-dev.yml配置文件,database、redis、influxdb等配置- 具体路径如下:
BladeX-Links/blade-service/blade-data/src/main/resources/application-dev.yml - 需要修改的配置如下
(展示的为默认配置,实际情况请修改为自行设置的ip、端口、用户名、密码等配置):
#数据源配置 spring: data: redis: ##redis 单机环境配置 host: 192.168.0.1 port: 6379 password: database: 0 ssl: enabled: false ##redis 集群环境配置 #cluster: # nodes: 127.0.0.1:7001,127.0.0.1:7002,127.0.0.1:7003 # commandTimeout: 5000 datasource: url: jdbc:mysql://localhost:3306/bladex_iot?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8 username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver kafka: bootstrap-servers: 192.168.0.1:9092 #时序数据库配置 tdengine: enabled: true # 是否开启,多个时序库插件依赖同时导入可采用此参数配置,开启的时序库 username: root password: taosdata database: links # 库名,会自动建库 jdbc-url: jdbc:TAOS-RS://192.168.0.1:6041?useSSL=false # 数据精度,默认:毫秒 precision: ms # 数据保存的天数,默认:10年 keep: 3650 # 批量写入相关配置 enable-batch: true # 开启批量写,默认:开 batch-size: 1000 # 批次大小,默认:1000 flush-duration: 1s # 批次写入时间,默认:1s 写入一次 # 连接池相关配置,可按需求进行配置,建议改大一些 initial-size: 8 # 初始化的连接数,默认:8 max-active: 32 # 最大活跃连接数,默认:32 min-idle: 8 # 最小活跃连接数,默认:8 max-wait: -1 # 最大等待时间,默认:-1 不限制 - 具体路径如下:
- 启动
BladeX-Links工程下的blade-data模块的DataApplication启动类,日志出现Started DataApplication即表示服务启动完成。
八、注意事项
生产安全必看
- 上线后必须修改admin密码,防止被人恶意登录影响系统安全。
- 必须修改各数据库、redis的端口密码,防止被恶意程序扫描到。
- 熟读Blade安全手册,解决系统的安全隐患:点击查看
- 为了提升emqx默认性能,可按照下图两处进行配置。


