开发者教程
大约 9 分钟
开发者教程
概述
本教程旨在介绍开发者参与物联网平台开发的基本流程、规范,帮助开发者快速上手,实现物联网平台的协同开发,实现功能的快速迭代及升级,打造一款便捷、易用、高效、高性能的物联网平台。
软件架构
物联网中心组件脑图
物联网中心组件逻辑关系图
物联网中心软件架构图
开发工作流
注:
- 所有代码提交记录都需要与云效中的需求、任务、BUG匹配;
- 需求、任务、BUG在修改前均需要进行必要性、实用性、难度评估,评估结果通过云效中确认;
- 开发人员无法向主要分支及版本分支中推送代码,只能通过Pull Request方式提交代码;管理员进行代码评审、合并;
基础开发环境&工具准备
开发工具集
以下均为笔者Windows操作系统工具,其他操作系统可参考对应工具(或选择替代工具)进行安装。
- Git
- JDK8
- JDK17
- Maven 3.6.x+
- Node.js 16.20.x
- Navicat 数据库管理软件
- Another Redis Desktop Manager Redis可视化工具
- MQTTX Mqtt客户端
- Apifox Api工具
- Wireshark 网络抓包工具
- OpenVPN Connect VPN
- Docker Desktop
- Visual Studio Code
- IntelliJ IDEA
- PotPlayer 视频播放工具
- Golang 1.20.x
- kubectl
- telepresence
仓库地址
# IOT前后端地址
git clone https://codeup.aliyun.com/clzy/product/clzy-bigdata/iot/cljs-iot.git
# script-runner、adapter、adapter-rrpc
git clone https://codeup.aliyun.com/clzy/product/clzy-bigdata/iot/protocol-adapter-server.git
# rule-engine
git clone https://codeup.aliyun.com/clzy/product/clzy-bigdata/iot/rule-engine.git
# endpoint-auth
git clone https://codeup.aliyun.com/clzy/product/clzy-bigdata/iot/endpoint-auth.git
# sip-server
git clone https://codeup.aliyun.com/clzy/product/clzy-bigdata/iot/sip-server.git
# http-endpoint
git clone https://codeup.aliyun.com/clzy/product/clzy-bigdata/iot/broker/iot-http-broker.git
# data-storage-server
git clone https://codeup.aliyun.com/clzy/product/clzy-bigdata/iot/data-storage-server.git
# cljs-device-wechat
git clone https://codeup.aliyun.com/clzy/product/clzy-bigdata/iot/cljs-device-wechat.git
# IOT前后端地址
git clone git@codeup.aliyun.com:clzy/product/clzy-bigdata/iot/cljs-iot.git
# script-runner、adapter、adapter-rrpc
git clone git@codeup.aliyun.com:clzy/product/clzy-bigdata/iot/protocol-adapter-server.git
# rule-engine
git clone git@codeup.aliyun.com:clzy/product/clzy-bigdata/iot/rule-engine.git
# endpoint-auth
git clone git@codeup.aliyun.com:clzy/product/clzy-bigdata/iot/endpoint-auth.git
# sip-server
git clone git@codeup.aliyun.com:clzy/product/clzy-bigdata/iot/sip-server.git
# http-endpoint
git clone git@codeup.aliyun.com:clzy/product/clzy-bigdata/iot/broker/iot-http-broker.git
# data-storage-server
git clone git@codeup.aliyun.com:clzy/product/clzy-bigdata/iot/data-storage-server.git
# cljs-device-wechat
git clone git@codeup.aliyun.com:clzy/product/clzy-bigdata/iot/cljs-device-wechat.git
搭建开发环境
基础工作
- 云效Codeup代码仓库账号设置(二选一)
- 云效Maven制品仓库设置
前端frontend开发
💡 适用场景:
修改前端页面问题,不涉及到修改后端和其他组件服务。
- 获取代码
git clone https://codeup.aliyun.com/clzy/product/clzy-bigdata/iot/cljs-iot.git
git clone git@codeup.aliyun.com:clzy/product/clzy-bigdata/iot/cljs-iot.git
- 配置后端backend地址
在cljs-iot/frontend
目录下的.env
文件中,修改VUE_APP_API_URL
为后端的API地址,VUE_APP_AUTH_URL
为keycloak认证地址即可。
注:VUE_APP_AUTH_URL
地址必须与后端backend配置文件中配置的认证地址一致。
# 所有环境默认
# 页面 title
VUE_APP_TITLE=物联网中心
# 后台服务api
VUE_APP_API_URL=http://192.168.110.81:3790/api/
# VUE_APP_API_URL=http://localhost:8802/api/
# 后台服务代理地址(正式部署使用)
VUE_APP_API_PROXY_URL=http://iot-backend-service.cljs.svc:8800
# 统一认证参数
VUE_APP_AUTH_URL=http://sso.jsyun.clzytech.com:30600/auth
# 大屏设计器前端跳转域名。/结尾
VUE_APP_DESIGNER_URL=http://127.0.0.1:5173/
# nodered配置统一前缀
# VUE_APP_NODERED_HOST=http://iot.jsyun.clzytech.com:36939/
VUE_APP_NODERED_HOST=/
- 运行
cd cljs-iot/frontend
npm install
npm run dev
后端backend开发
💡 适用场景:
修改后端业务功能,以及依赖后端的其他业务组件开发。
💡 小提示:
backend推荐使用IDEA工具进行开发,开发前请先安装Clzy Application
- 获取代码
git clone https://codeup.aliyun.com/clzy/product/clzy-bigdata/iot/cljs-iot.git
git clone git@codeup.aliyun.com:clzy/product/clzy-bigdata/iot/cljs-iot.git
- 下载安装Taos数据库客户端工具
TDengine-client-3.0.6.0-Windows-x64 - 连接kubernetes集群仅限公司网络环境
- 安装kubectl
- 获取kubeconfig,放置于
%USERPROFILE%\.kube\config
。文件获取请联系管理员 - 安装telepresence工具,下载安装包解压后执行以下
powershell
命令
# 使用管理员权限运行 Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass # telepresence安装包解压后的目录 cd path_to_telepresence_dir # 执行安装脚本 ./install-telepresence.ps1
- 使用telepresence工具连接kubernetes集群
telepresence connect # 确认ping是否正常 ping redis.iot2.svc.cluster.local
- 配置运行参数
开发环境统一使用application-dev.yml配置文件启动项目。文件位于:backend/cljs-iot-starter/src/main/resources/application-dev.yml
clzy:
k8s:
### k8s集群api server地址
url: https://kubernetes.default.svc.cluster.local
### k8s集群api server认证token
token: eyJhbGciOiJSUzI1NiIsImtpZCI6InVJck41dUQwOTU5TWU3eF9KQjFXYmNQVEVLSzlrdTRWeXI3M3dpUGk3V0kifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tMjhndmMiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiOWNlYzMyMGMtNDM5Ni00ZTk0LTkxZmQtYmY4ODc2NWZiYTcwIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbiJ9.k7Ul_p5SghxLj5J9x_YQvKFhVyWK9SiNgOE9TwnZx6k9tCEuBsRAbbL7tzZNLutPa6sGIWF64DR6ExvfpuI7upknMmgVXZp1ZjETjEO4c26sKtESLxyQ-8io6q2DTwCuvdDnG7DvWVBhEU2KtlhEEQy_lHICvkKOrS21UNMYzq3x8Yn0K5yhG62xbOXq7d1nQm-Qg9j3LxtzInSZK5QDfwji94eTReF5-UQyNDWEVPfjEsDSPb48M1G3LFGliStdGgQEH25_vXIHNw0o_AQwSFBhNYvA27wHM3vvHKk-Nk7SPNgdTJmL6DkvfO-746nsY9659pcsht0VfTQMMXbcGQ
### tdengine数据库地址
tdengine:
url: jdbc:TAOS://taosd.iot2.svc.cluster.local:6030/?charset=utf-8&locale=en_US.UTF-8&timezone=UTC-8
spring:
thymeleaf:
cache: true
datasource:
druid:
### 数据库连接地址
url: jdbc:postgresql://192.168.110.81:30927/cljs-iot-dev
username: postgres
password: 123456
driver-class-name: org.postgresql.Driver
jackson:
time-zone: GMT+8
redis:
### redis地址
host: redis.iot2.svc.cluster.local
logging:
level:
root: info
com.clzy.cljs.iot.device.service.DeviceService: debug
file:
path: ./logs
com:
clzy:
sso:
### keycloak认证地址
realm: cljs
auth-server-url: http://sso.jsyun.clzytech.com:30600/auth/
ssl-required: external
use-resource-role-mappings: false
cors: true
app-secret: "b4b88583-790a-45aa-8cb1-0003266476de"
app-id: iot-server
file:
local:
data-dir: E:\itouxin\Downloads
### kubernetes集群中的POD与实例组件状态同步任务开启状态
syncProjectStatus:
disable: true
syncParserStatus:
disable: true
startMqttService:
disable: true
scheduleStat:
disable: true
### 脚本运行组件地址配置
script-runner:
host: http://192.168.110.81:28768
# host: http://127.0.0.1:8081
- 使用Clzy Application选择
backend/cljs-iot-starter/src/main/java/com/clzy/cljs/iot/IotApplication.java
文件启动项目
注: VM参数增加-Dspring.profiles.active=dev
参数以启用dev
配置
script-runner开发
data-parser开发
ruleengine开发
adapter-rrpc开发
adapter开发
endpoint-auth开发
http-endpoint开发
iot-sip-server开发
任务管理
统一使用云效进行任务的管理成理极数-物联网中心
功能修改及测试
- 功能修改前,需要在云效的事项中完善设计思路、实现原理
代码管理
新建分支进行开发
- 基于需要修改的基础分支创建新分支。
- 分支命名规范为
feat-X.Y.Z-xxxxxxxxxxxx
,fix-X.Y.Z-xxxxxxxxxxxx
,docs-X.Y.Z-xxxxxxxxxxxx
; feat
、fix
、docs
分别代表功能、bug修复、文档修改X.Y.Z
为当前修改功能的分支版本xxxxxxxxxxxx
为功能描述,描述长度不能少于6个字符
- 分支命名规范为
代码推送描述信息规则
规则:
^((fix|feat|docs):\s#CIOT\-([0-9]+)|Merge)\s.{6,}
- 必须以
fix
、feat
、docs
中的某一个开始。feat
、fix
、docs
分别代表功能、bug修复、文档修改 - 紧接着跟冒号和空格
- 紧接着跟一个云效事项编号,以#开头,编号来源为云效事项的编号
- 紧接着空格后跟一个描述,描述长度不能少于6个字符
示例:
fix: #CIOT-001 设备数据查看列表页面,点击查询,无法查询最新的数据
feat: #CIOT-002 视频功能增加云端录像功能
docs: #CIOT-003 视频功能文档更新
提交Pull Request
开发人员通过Git
工具或者云效,提交Pull Request
到要合并的基础分支,由管理员进行代码评审、合并。
版本发布
当一个版本开发测试完成之后,管理员进行版本发布工作。参考:版本发布流程