# TB Source Tree :::info * **TB Architecture**  ::: [toc] ## 目錄結構 * version: **tb 3.9.0** ```bash star@may:~/workspace$ git clone --branch release-3.9 https://github.com/thingsboard/thingsboard.git star@may:~/workspace$ tree -L 1 thingsboard/ thingsboard/ ├── application ├── build_proto.sh ├── build.sh ├── common ├── dao ├── docker ├── img ├── LICENSE ├── license-header-template.txt ├── lombok.config ├── monitoring ├── msa ├── netty-mqtt ├── packaging ├── pom.xml ├── pull_request_template.md ├── README.md ├── rest-client ├── rule-engine ├── security.md ├── tools ├── transport └── ui-ngx ``` ### application :::info 核心應用目錄,包含了大部分的業務邏輯和功能模組, * src/main/java/org/thingsboard/server:包含 Java 原始碼,ThingsBoard 的核心邏輯。 * src/main/resources:包含資源文件, 如配置文件。 ::: ``` thingsboard/application/ ├── pom.xml └── src ├── main │ ├── conf │ │ ├── logback.xml │ │ └── thingsboard.conf │ ├── data │ │ ├── certs │ │ ├── json │ │ ├── lwm2m-registry │ │ ├── resources │ │ └── upgrade │ ├── java │ │ └── org │ └── resources │ ├── banner.txt │ ├── i18n │ ├── logback.xml │ ├── templates │ └── thingsboard.yml └── test ├── java │ └── org └── resources ├── application-test.properties ├── coap ├── logback-test.xml ├── lwm2m ├── mockito-extensions ├── provision └── update ``` ### common :::info 共用模組,包含一些通用的工具類別和配置。 * data:共用資料結構和工具類別。 ::: ``` thingsboard/common/ ├── actor │ ├── pom.xml │ └── src │ ├── main │ │ └── java │ └── test │ ├── java │ └── resources ├── cache │ ├── pom.xml │ └── src │ ├── main │ │ └── java │ └── test │ ├── java │ └── resources ├── cluster-api │ ├── pom.xml │ └── src │ └── main │ └── java ├── coap-server │ ├── pom.xml │ └── src │ ├── main │ │ └── java │ └── test │ └── java ├── dao-api │ ├── pom.xml │ └── src │ └── main │ └── java ├── data │ ├── pom.xml │ └── src │ ├── main │ │ └── java │ └── test │ ├── java │ └── resources ├── edge-api │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── proto ├── message │ ├── pom.xml │ └── src │ ├── main │ │ ├── java │ │ └── proto │ └── test │ ├── java │ └── resources ├── pom.xml ├── proto │ ├── pom.xml │ └── src │ ├── main │ │ ├── java │ │ └── proto │ └── test │ ├── java │ └── resources ├── queue │ ├── pom.xml │ └── src │ ├── main │ │ └── java │ └── test │ ├── java │ └── resources ├── script │ ├── pom.xml │ ├── remote-js-client │ │ ├── pom.xml │ │ └── src │ │ └── main │ └── script-api │ ├── pom.xml │ └── src │ ├── main │ └── test ├── stats │ ├── pom.xml │ └── src │ └── main │ └── java ├── transport │ ├── coap │ │ ├── pom.xml │ │ └── src │ │ ├── main │ │ └── test │ ├── http │ │ ├── pom.xml │ │ └── src │ │ ├── main │ │ └── test │ ├── lwm2m │ │ ├── pom.xml │ │ └── src │ │ ├── main │ │ └── test │ ├── mqtt │ │ ├── pom.xml │ │ └── src │ │ ├── main │ │ └── test │ ├── pom.xml │ ├── snmp │ │ ├── pom.xml │ │ └── src │ │ ├── main │ │ └── test │ └── transport-api │ ├── pom.xml │ └── src │ ├── main │ └── test ├── util │ ├── pom.xml │ └── src │ ├── main │ │ └── java │ └── test │ ├── java │ └── resources └── version-control ├── pom.xml └── src └── main └── java ``` ### dao :::info dao 資料夾的全名是 ``Data Access Object``。 這是一種設計模式,用於抽象和封裝對數據源的訪問和操作。 * **用途** 數據訪問抽象:dao 資料夾中的類別和方法提供了對資料庫的抽象訪問。這意味著它們負責執行資料庫操作,如查詢、插入、更新和刪除資料,而不暴露資料庫的具體實現細節。 分離關注點:通過使用 DAO 模式,ThingsBoard 將業務邏輯與數據訪問邏輯分開,讓原始碼更具可維護性和可測試性,因為資料訪問邏輯集中在一個地方。 資料庫獨立性:DAO 模式允許 ThingsBoard 更容易地切換資料庫或資料存儲技術,因為資料訪問邏輯被封裝在 DAO 類中,而不是散佈在整個應用程式中。 簡化測試:由於 DAO 類別專注於數據訪問,可以通過模擬或偽裝 DAO 類別簡化單元測試,而無需依賴實際的資料庫。 * **結構** DAO 類:dao 資料夾中通常包含多個 DAO 類別,每個類別負責特定實體(如設備、用戶、資產等)的資料訪問操作。 方法:每個 DAO 類通常包含多個方法,這些方法對應於對數據庫的各種操作,如 save、find、update 和 delete。 這些 DAO 類別共同構成了 ThingsBoard 資料訪問層,確保資料操作的一致性和可靠性。 ::: ``` thingsboard/dao/ ├── pom.xml └── src ├── main │ ├── java │ │ └── org │ └── resources │ ├── cassandra │ ├── sql │ └── xss-policy.xml └── test ├── java │ └── org └── resources ├── application-test.properties ├── cassandra-test.properties ├── cassandra-test.yaml ├── logback-test.xml ├── nosql-test.properties ├── sql ├── sql-test.properties ├── TestJsonData.json ├── TestJsonDescriptor.json ├── timescale-test.properties └── xss-policy.xml ``` ### docker :::info Docker 相關的配置和 script,用於構建和部署 ThingsBoard 的 Docker 映像。 ::: ``` thingsboard/docker/ ├── cache-redis-cluster.env ├── cache-redis.env ├── cache-redis-sentinel.env ├── compose-utils.sh ├── docker-check-log-folders.sh ├── docker-compose.aws-sqs.yml ├── docker-compose.cassandra.volumes.yml ├── docker-compose.confluent.yml ├── docker-compose.hybrid.yml ├── docker-compose.kafka.yml ├── docker-compose.postgres.volumes.yml ├── docker-compose.postgres.yml ├── docker-compose.prometheus-grafana.yml ├── docker-compose.pubsub.yml ├── docker-compose.rabbitmq.yml ├── docker-compose.redis-cluster.volumes.yml ├── docker-compose.redis-cluster.yml ├── docker-compose.redis-sentinel.volumes.yml ├── docker-compose.redis-sentinel.yml ├── docker-compose.redis.volumes.yml ├── docker-compose.redis.yml ├── docker-compose.service-bus.yml ├── docker-compose.volumes.yml ├── docker-compose.yml ├── docker-create-log-folders.sh ├── docker-install-tb.sh ├── docker-remove-services.sh ├── docker-start-services.sh ├── docker-stop-services.sh ├── docker-update-service.sh ├── docker-upgrade-tb.sh ├── haproxy │ └── config │ ├── blocklist.txt │ ├── haproxy.cfg │ └── trustlist.txt ├── kafka.env ├── monitoring │ ├── grafana │ │ ├── config.monitoring │ │ └── provisioning │ │ ├── dashboards │ │ └── datasources │ └── prometheus │ └── prometheus.yml ├── queue-aws-sqs.env ├── queue-confluent.env ├── queue-kafka.env ├── queue-pubsub.env ├── queue-rabbitmq.env ├── queue-service-bus.env ├── README.md ├── tb-coap-transport.env ├── tb-http-transport.env ├── tb-js-executor.env ├── tb-lwm2m-transport.env ├── tb-mqtt-transport.env ├── tb-node │ └── conf │ ├── logback.xml │ └── thingsboard.conf ├── tb-node.env ├── tb-node.hybrid.env ├── tb-node.postgres.env ├── tb-snmp-transport.env ├── tb-transports │ ├── coap │ │ └── conf │ │ ├── logback.xml │ │ └── tb-coap-transport.conf │ ├── http │ │ └── conf │ │ ├── logback.xml │ │ └── tb-http-transport.conf │ ├── lwm2m │ │ └── conf │ │ ├── logback.xml │ │ └── tb-lwm2m-transport.conf │ ├── mqtt │ │ └── conf │ │ ├── logback.xml │ │ └── tb-mqtt-transport.conf │ └── snmp │ └── conf │ ├── logback.xml │ └── tb-snmp-transport.conf ├── tb-vc-executor │ └── conf │ ├── logback.xml │ └── tb-vc-executor.conf ├── tb-vc-executor.env └── tb-web-ui.env ``` ### img ``` thingsboard/img/ └── logo.png ``` ### monitoring :::info monitoring 資料夾通常負責監控 ThingsBoard 平台的運行狀態和性能。 此模組的主要目的是提供工具和功能,幫助管理員和開發者監控系統的健康狀態、性能指標和潛在問題。 ::: ``` thingsboard/monitoring/ ├── pom.xml └── src └── main ├── conf │ ├── logback.xml │ └── tb-monitoring.conf ├── java │ └── org └── resources ├── logback.xml ├── lwm2m ├── root_rule_chain.json └── tb-monitoring.yml ``` ### msa :::info 微服務架構 (MicroService Architecture) 模組,支援 ThingsBoard 的微服務化部署。 ::: ``` thingsboard/msa/ ├── black-box-tests │ ├── pom.xml │ ├── README.md │ └── src │ └── test │ ├── java │ └── resources ├── js-executor │ ├── api │ │ ├── httpServer.ts │ │ ├── jsExecutor.models.ts │ │ ├── jsExecutor.ts │ │ ├── jsInvokeMessageProcessor.ts │ │ └── utils.ts │ ├── config │ │ ├── custom-environment-variables.yml │ │ ├── default.yml │ │ ├── logger.ts │ │ └── tb-js-executor.conf │ ├── docker │ │ ├── Dockerfile │ │ └── start-js-executor.sh │ ├── install.js │ ├── package.json │ ├── pom.xml │ ├── queue │ │ ├── kafkaTemplate.ts │ │ └── queue.models.ts │ ├── server.ts │ ├── tsconfig.json │ └── yarn.lock ├── monitoring │ ├── docker │ │ ├── Dockerfile │ │ └── start-tb-monitoring.sh │ └── pom.xml ├── pom.xml ├── tb │ ├── docker │ │ ├── install-tb.sh │ │ ├── logback.xml │ │ ├── start-tb.sh │ │ ├── thingsboard.conf │ │ └── upgrade-tb.sh │ ├── docker-cassandra │ │ ├── Dockerfile │ │ ├── start-db.sh │ │ └── stop-db.sh │ ├── docker-postgres │ │ ├── Dockerfile │ │ ├── start-db.sh │ │ └── stop-db.sh │ ├── pom.xml │ └── README.md ├── tb-node │ ├── docker │ │ ├── Dockerfile │ │ └── start-tb-node.sh │ └── pom.xml ├── transport │ ├── coap │ │ ├── docker │ │ │ ├── Dockerfile │ │ │ └── start-tb-coap-transport.sh │ │ └── pom.xml │ ├── http │ │ ├── docker │ │ │ ├── Dockerfile │ │ │ └── start-tb-http-transport.sh │ │ └── pom.xml │ ├── lwm2m │ │ ├── docker │ │ │ ├── Dockerfile │ │ │ └── start-tb-lwm2m-transport.sh │ │ └── pom.xml │ ├── mqtt │ │ ├── docker │ │ │ ├── Dockerfile │ │ │ └── start-tb-mqtt-transport.sh │ │ └── pom.xml │ ├── pom.xml │ └── snmp │ ├── docker │ │ ├── Dockerfile │ │ └── start-tb-snmp-transport.sh │ └── pom.xml ├── vc-executor │ ├── pom.xml │ └── src │ └── main │ ├── conf │ ├── java │ └── resources ├── vc-executor-docker │ ├── docker │ │ ├── Dockerfile │ │ └── start-tb-vc-executor.sh │ └── pom.xml └── web-ui ├── config │ ├── custom-environment-variables.yml │ ├── default.yml │ ├── logger.ts │ └── tb-web-ui.conf ├── docker │ ├── Dockerfile │ └── start-web-ui.sh ├── install.js ├── package.json ├── pom.xml ├── server.ts ├── tsconfig.json └── yarn.lock ``` ### netty-mqtt :::info Netty 框架:netty-mqtt 資料夾的名稱表明 ThingsBoard 使用了 Netty 框架來實現 MQTT 功能。Netty 是一個非阻塞的、事件驅動的網絡應用框架,廣泛用於高性能的網絡應用開發。 模組化設計:使用 netty-mqtt 這樣的命名可能是為了更好地模組化 ThingsBoard 的代碼結構,使得 MQTT 相關的功能更加獨立和可擴展。 性能優化:Netty 框架以其高性能和低延遲著稱,使用 Netty 來實現 MQTT 功能可能是為了提高 ThingsBoard 的性能和可靠性。 如何理解和使用 原始碼結構:瀏覽 netty-mqtt 資料夾,了解其中的類別和方法,特別是那些處理 MQTT 消息的核心類別。 配置和使用:查看 ThingsBoard 的配置文件和官方文檔,了解如何配置和使用 MQTT 功能。 擴展和自定義:如果需要擴展或自定義 MQTT 功能,可以在 netty-mqtt 資料夾中進行修改或添加新的實現。 ::: ``` thingsboard/netty-mqtt/ ├── pom.xml └── src ├── main │ └── java │ └── org └── test ├── java │ └── org └── resources ├── junit-platform.properties └── logback-test.xml ``` ### packaging :::info packaging 資料夾通常負責處理 ThingsBoard 的打包和發布過程。 此資料夾包含了將 ThingsBoard 打包成可發行形式(如 Docker 映像、Debian 套件等)所需的 script 和配置文件。 ::: ``` thingsboard/packaging/ ├── java │ ├── assembly │ │ └── windows.xml │ ├── build.gradle │ ├── filters │ │ ├── unix.properties │ │ └── windows.properties │ └── scripts │ ├── control │ │ ├── deb │ │ ├── rpm │ │ └── template.service │ ├── install │ │ ├── install_dev_db.sh │ │ ├── install.sh │ │ ├── logback.xml │ │ ├── upgrade_dev_db.sh │ │ └── upgrade.sh │ └── windows │ ├── install.bat │ ├── install_dev_db.bat │ ├── service.xml │ ├── uninstall.bat │ └── upgrade.bat └── js ├── assembly │ └── windows.xml ├── build.gradle ├── filters │ ├── unix.properties │ └── windows.properties └── scripts ├── control │ ├── deb │ ├── rpm │ └── template.service ├── init │ └── template └── windows ├── install.bat ├── service.xml └── uninstall.bat ``` ### rest-client :::info rest-client 資料夾通常負責處理與外部 REST API 的互動。此模組允許 ThingsBoard 與其他服務或平台進行通信,從而實現資料的匯入、匯出或其他形式的整合。 ::: ``` thingsboard/rest-client/ ├── pom.xml └── src └── main ├── java │ └── org └── resources └── logback.xml ``` ### rule-engine :::info 規則引擎模組,用於處理和轉換資料流。 * rule-engine-api:規則引擎的 API 接口。 * rule-engine-components:規則引擎的元件。 ::: ``` thingsboard/rule-engine/ ├── pom.xml ├── rule-engine-api │ ├── pom.xml │ └── src │ ├── main │ │ └── java │ └── test │ ├── java │ └── resources └── rule-engine-components ├── pom.xml └── src ├── main │ ├── java │ └── resources └── test ├── java └── resources ``` ### tools :::info 工具模組,包含一些輔助工具和 script。 ::: ``` thingsboard/tools/ ├── pom.xml └── src └── main ├── java │ └── org ├── python │ ├── check_yml_file.py │ ├── mqtt-send-telemetry.py │ ├── one-way-ssl-mqtt-client.py │ ├── simple-mqtt-client.py │ └── two-way-ssl-mqtt-client.py └── shell ├── client.keygen.sh ├── keygen.properties ├── lwm2m └── server.keygen.sh ``` ### transport :::info transport 資料夾是負責處理不同傳輸協議的模組。 ::: ``` thingsboard/transport/ ├── coap │ ├── pom.xml │ └── src │ └── main │ ├── conf │ ├── java │ └── resources ├── http │ ├── pom.xml │ └── src │ └── main │ ├── conf │ ├── java │ └── resources ├── lwm2m │ ├── pom.xml │ └── src │ └── main │ ├── conf │ ├── java │ └── resources ├── mqtt │ ├── pom.xml │ └── src │ └── main │ ├── conf │ ├── java │ └── resources ├── pom.xml └── snmp ├── pom.xml └── src └── main ├── conf ├── java └── resources ``` ### ui-ngx :::info 用戶介面模組,包含了 ThingsBoard 的前端原始碼 (基於 Angular 的前端介面)。 src:包含前端的原始碼和資源文件。 ::: ``` thingsboard/ui-ngx/ ├── angular.json ├── esbuild │ └── tb-esbuild-plugins.ts ├── generate-icon-metadata.js ├── generate-types.js ├── LICENSE ├── package.json ├── patches │ ├── @angular+build+18.2.12.patch │ ├── @angular+core+18.2.13.patch │ ├── @angular+flex-layout+15.0.0-beta.42.patch │ ├── angular-gridster2+18.0.1.patch │ ├── canvas-gauges+2.1.7.patch │ ├── jquery.terminal+2.44.1.patch │ └── @mat-datetimepicker+core+14.0.0.patch ├── pom.xml ├── proxy.conf.js ├── src │ ├── app │ │ ├── app.component.html │ │ ├── app.component.scss │ │ ├── app.component.ts │ │ ├── app.module.ts │ │ ├── app-routing.module.ts │ │ ├── core │ │ │ ├── api │ │ │ ├── auth │ │ │ ├── core.module.ts │ │ │ ├── core.state.ts │ │ │ ├── css │ │ │ ├── guards │ │ │ ├── http │ │ │ ├── interceptors │ │ │ ├── local-storage │ │ │ ├── meta-reducers │ │ │ ├── notification │ │ │ ├── operator │ │ │ ├── public-api.ts │ │ │ ├── services │ │ │ ├── settings │ │ │ ├── translate │ │ │ ├── utils.ts │ │ │ └── ws │ │ ├── modules │ │ │ ├── common │ │ │ ├── dashboard │ │ │ ├── home │ │ │ └── login │ │ └── shared │ │ ├── adapter │ │ ├── animations │ │ ├── components │ │ ├── decorators │ │ ├── directives │ │ ├── import-export │ │ ├── legacy │ │ ├── models │ │ ├── pipe │ │ ├── public-api.ts │ │ ├── services │ │ └── shared.module.ts │ ├── assets │ │ ├── android-ios-stores-badges │ │ │ ├── android_store_en_black_badge.svg │ │ │ └── ios_store_en_black_badge.svg │ │ ├── copy-code-icon.svg │ │ ├── dashboard │ │ │ ├── api_usage.json │ │ │ ├── customer_user_home_page.json │ │ │ ├── sys_admin_home_page.json │ │ │ └── tenant_admin_home_page.json │ │ ├── docker.svg │ │ ├── fonts │ │ │ ├── material-icons.css │ │ │ ├── MaterialIcons-Regular.ttf │ │ │ └── MaterialIconsRound-Regular.otf │ │ ├── help │ │ │ ├── en_US │ │ │ └── images │ │ ├── home │ │ │ ├── greetings_bg.svg │ │ │ ├── no_data_bg.svg │ │ │ └── no_data_folder_bg.svg │ │ ├── jstree │ │ │ ├── tb32px.png │ │ │ └── tb40px.png │ │ ├── linux.svg │ │ ├── locale │ │ │ ├── locale.constant-ar_AE.json │ │ │ ├── locale.constant-ca_ES.json │ │ │ ├── locale.constant-cs_CZ.json │ │ │ ├── locale.constant-da_DK.json │ │ │ ├── locale.constant-de_DE.json │ │ │ ├── locale.constant-el_GR.json │ │ │ ├── locale.constant-en_US.json │ │ │ ├── locale.constant-es_ES.json │ │ │ ├── locale.constant-fa_IR.json │ │ │ ├── locale.constant-fr_FR.json │ │ │ ├── locale.constant-it_IT.json │ │ │ ├── locale.constant-ja_JP.json │ │ │ ├── locale.constant-ka_GE.json │ │ │ ├── locale.constant-ko_KR.json │ │ │ ├── locale.constant-lt_LT.json │ │ │ ├── locale.constant-lv_LV.json │ │ │ ├── locale.constant-nl_BE.json │ │ │ ├── locale.constant-pl_PL.json │ │ │ ├── locale.constant-pt_BR.json │ │ │ ├── locale.constant-ro_RO.json │ │ │ ├── locale.constant-sl_SI.json │ │ │ ├── locale.constant-tr_TR.json │ │ │ ├── locale.constant-uk_UA.json │ │ │ ├── locale.constant-zh_CN.json │ │ │ └── locale.constant-zh_TW.json │ │ ├── logo_title_white.svg │ │ ├── logo_white.svg │ │ ├── macos.svg │ │ ├── metadata │ │ │ ├── material-icons.json │ │ │ └── units.json │ │ ├── notification-bell.svg │ │ ├── shadow.png │ │ ├── split.js │ │ │ └── grips │ │ ├── widget │ │ │ ├── alarm-count │ │ │ ├── battery-level │ │ │ ├── button │ │ │ ├── doughnut │ │ │ ├── entity-count │ │ │ ├── liquid-level │ │ │ ├── power-button │ │ │ ├── progress-bar │ │ │ ├── segmented-button │ │ │ ├── signal-strength │ │ │ ├── simple-gauge │ │ │ ├── single-switch │ │ │ ├── slider │ │ │ ├── status-widget │ │ │ ├── value-card │ │ │ ├── value-chart-card │ │ │ └── wind-speed-direction │ │ ├── widget-preview-empty.svg │ │ └── windows.svg │ ├── environments │ │ ├── environment.prod.ts │ │ └── environment.ts │ ├── form.scss │ ├── index.html │ ├── main.ts │ ├── polyfills.ts │ ├── scss │ │ ├── animations.scss │ │ ├── constants.scss │ │ ├── fonts.scss │ │ └── mixins.scss │ ├── styles.scss │ ├── theme │ │ └── datepicker-theme.scss │ ├── theme-overwrites.scss │ ├── theme.scss │ ├── thingsboard.ico │ ├── tsconfig.app.json │ ├── typings │ │ ├── jquery.flot.typings.d.ts │ │ ├── jquery.jstree.typings.d.ts │ │ ├── jquery.typings.d.ts │ │ ├── leaflet-extend-tb.d.ts │ │ ├── leaflet-geoman-extend.d.ts │ │ ├── rawloader.typings.d.ts │ │ ├── split.js.typings.d.ts │ │ └── utils.d.ts │ └── zone-flags.ts ├── tailwind.config.js ├── tsconfig.json └── yarn.lock ``` # References
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up