IoT開源平臺Thingsboard二次開發研究

ThingsBoard 二次開發指南

參考資料

TB官方文檔(英文)
Protobuf的講解

概述

    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。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章