ThingsBoard 二次開發指南
參考資料
概述
1 整個ThingsBoard的代碼中,變量、方法命名規範;
2 變量和方法的標識符,字面意思基本能表達整個方法或變量的功能或目的;
3 TB採用了模塊化開發來實現鬆耦合、高內聚。每個模塊之間有一定的依賴;
4 微服務集羣的容器使用Docker,容器編排使用k8s;
5 使用了Actors編程模型(AKKA框架)(純異步)、事件驅動模型;
二開團隊知識儲備
MQTT協議 & MQTT Broker(重要)
CoAP協議
HTTP協議(除get/post之外的動作)
WebSocket協議
RESTFUL 設計規範
TCP/IP協議簇
IoT Gateway
規則引擎概念與設計
Actors編程模型理論
Google Protocol Buffer 原理與使用
AKKA框架
Netty
kafka
PostgreSQL數據庫
Nodejs
Vue SPA套件(UI重製)
目錄結構
application: 應用程序主目錄,整體項目打包時也是這個Module
src/main/java/org.thingsboard.server: app主目錄
actors: actor執行者目錄
config: 配置類目錄
controller: 控制器
exception: 異常處理
service: 服務目錄,app打包後,server要運行的服務的實現都在這裏
cluster: 集羣服務,包括服務發現、服務實例等
script: 腳本執行服務,主要是規則引擎的執行(JS)
transport: 消息傳輸服務
rpc: 遠程調用服務
utils: 工具類
common: 公共工具集、方法集模塊
dao-api: 數據訪問對象的服務接口,在這裏做定義
data: 用於不同數據庫之間的中間數據結構
message: 消息服務的實現集,包括集羣消息、TB的基礎服務消息、系統類消息
queue: 隊列服務的實現集,用的Kafka
transport: 消息傳輸通道服務的實現,定義公共接口,給客戶端的transport層使用
coap: CoAP消息傳輸的實現,包括適配器和客戶端
http: HTTP消息傳輸的實現
mqtt: MQTT消息傳輸的實現,包括適配器、會話、SSL工具等
util: 工具集(當前僅有一個異步回調工具)
dao: 數據訪問對象集合,整個應用的DAO層,一般只要dao的都要data,以實現不同數據庫數據結構兼容。
docker: 集羣部署-docker容器解決方案,包含了部署環境和shell腳本
haproxy: HAproxy工具的配置文件存放處
tb-node: 應用程序節點配置存放目錄
tb-transports: 消息傳輸服務的配置文件,包括coap,http,mqtt
img: 應用圖標存放處
k8s: 容器編排工具Kubernetes的配置文件和自動化腳本
msa: 微服務半自動構建模塊,包含了黑盒測試、js執行引擎等
black-box-tests: 黑盒測試工具
js-excutor: js執行引擎,基於nodejs,用於執行規則引擎中的js代碼(沙盒執行)
tb: tb主應用程序配置
tb-node: tb程序節點配置
transport: docker中的消息傳輸服務的部署配置
web-ui: TB的Web用戶界面在docker中部署的配置,自帶http server
netty-mqtt: TB的MQTT協議的實現,包括連接、發佈、訂閱、遺囑、關閉等
rule-engine: TB的規則引擎,TB沒有用開源的Drools等工具,而是自己開發了一套規則引擎,主要包含3個組件和1套服務接口
rule-engine-api: 服務接口的實現
rule-engine-components: 規則引擎組件,包含濾波器、動作、數據、腳本、延遲加載、消息、隊列、RPC實現、郵件等
tools: 工具模塊,主要實現了MQTT with SSL客戶端和REST客戶端。可以測試用。
transport: 三種消息傳輸服務啓動器,服務的實現參考common/transport,mqtt協議的實現見netty-mqtt
ui: TB的用戶界面,主要使用AngularJS和react組件,單頁應用(要替換掉,用Vue)
所需IDE插件
IDEA Plugins
protobuf
lombok
打包
TB將所有模塊打包,以application爲根模塊,打包成多個平臺的安裝包。
運行
TB以系統服務的方式運行:
CentOS/Redhat-------thingsboard.rpm
Debian--------thingsboard.deb
Windows------thingsboard-windows.zip
常見問題
一、 mvn clean install到Server UI出現npm install無法執行的錯誤:
結束Java binary進程後,用管理員權限運行Terminal(cmd或powershell或shell等)環境,最好不要更改npm源,
開全局代理,依次用以下方法:
1 更改UI,js-executor,web-ui下的pom.xml,將nodeVersion和npmVersion改成和本機版本一致。
如果上述方法不行
2 刪除本機Nodejs,重新執行。
如果還不行
3 跳過無法insall的項目,手動npm install,npm run build。執行邏輯在各自的pom.xml中。
二、IDE打開項目後,出現一大堆Error和Warning提示。
IDE中,安裝 protobuf、lombok兩個plugins,重啓IDE。