Thingsboard 2.5 CE版本项目结构说明
Thingsboard 2.5 CE版本项目结构说明
目录
第一章 项目框架整理说明
第二章 thingsboard涉及到的流程图
第三章 项目框架涉及到的第三方包或插件
第四章 ThingsBoard设备连接协议
第五章 ThingsBoard打包
第六章 ThingsBoard框架日志
第七章 ThingsBoard数据库
第八章 官网主要文档目录
第九章 前端技术概述
第十章 关于Thingsboard开发环境部署
版本 |
发布时间 |
修订章节 |
作者 |
1.0 |
20171118 |
[对修订章节的描述从最近的一次修订开始] |
琉璃 |
1.1 |
20190318 |
[版本升级修改] |
琉璃 |
2.0 |
20200707 |
[TB2.5版本最新版本修改] |
琉璃 |
参考资料 :
- https://thingsboard.io/docs/ 官方文档;
- https://github.com/thingsboard/thingsboard Github地址;
接口文档:
- 运行thingsboard服务后,在浏览器地址栏输入:http://localhost:8080/swagger-ui.html (进入swagger接口说明);
编写目的
- 编写此文档的目的是让开发人员对thingsboard框架快速的理解。
第一章 项目框架整理说明
- 项目框架说明
整体架构图如下:
系统功能结构图如下:
框架包含了11个一级包,其含义如下:
包名 |
包简说明 |
描述 |
涉及到的技术 |
备注 |
Application |
应用相关 |
新增thingsboard接口,或后端添加业务查询 |
可修改 |
|
Common |
公共部分 |
thingsboard基础方法 |
不可修改 |
|
Dao |
业务层 |
接口\实现\数据访问层 |
Data-jpa 注解 |
可修改 |
Docker |
docker部署 |
打包或虚拟部署 |
开发无需修改此包, |
|
Img |
图片 |
Logo.png图片 |
可添加 |
|
Msa |
分布式 |
不可修改 |
||
Netty-mqtt |
协议 |
开发无需修改此包, |
||
Rule-engine |
规则引擎 |
规则引擎 |
开发无需修改此包, |
|
Tools |
工具类 |
系统工具类 |
可修改添加 |
|
Transport |
应用层实现 |
三种请求协议 coap,http mqtt,提供使用(不可修改,可自定义协议,系统提供的三种协议) |
不可修改 |
|
UI |
前端界面 |
后台管理系统界面 |
Angularjs、ES6、Reactjs、webpack、node |
可修改 |
Log |
系统日志 |
系统错误日志收集器,以年月日展示 |
Logback |
不可修改 |
2. package包功能描述
- Application应用相关类
appaction.main.java.org.thingsboard.server ThingsboardServerApplication.java(启动类)
install thingsboard服务开启相关配置、异常和调用
exception thingsboard响应错误及错误逻辑处理
controller thingsboard页面展示必要的 系统数据 接口
service 为controller提供支持
config 为同源策略、swagger、webSocket、消息及安全配置注册spring bean
- Common
Data 用于与不同db之间的中间数据结构。
Message 定义不同的消息类型。
Transport 定义一个公共的接口,供与客户端的transport层使用
- Dao
dao抽象了对不同数据库的统一接口。dao的接口数据一般都data,根据不同的数据库在不同的接口中转换为对应的实体类与数据库交互.通过@ConditionalOnProperty(prefix = "database", value = "type", havingValue = "cassandra")动态注入不同的数据库
- Docker
系统发布资源类
- Img
系统图片类
- K8S
K8s分布式服务器部署
- Msa
black-box-tests 黑盒测试
js-executor javascript执行器
tb tb核心服务包
tb-node 规则引擎
transport 传输协议
web-ui UI服务包
- Netty-mqtt
数据交互协议
- Rule-engine
规则引擎相关代码
- Rest-client
Restful api客户端包
- Tools
系统工具类
- Transport
http Thingsboard的http传输协议启动类
coap Thingsboard的coap传输协议启动类
mqtt Thingsboard的mqtt传输协议启动类
- UI
使用到的前端技术: Angularjs、ES6、Reactjs、webpack
前端MVC、MVVM框架
设计到前端打包配置文件:server.js, webpack.*.js
3. thingsboard开发主要涉及到的包
如需在thingsboard添加新的接口
可参考:Usercontroller.java 类
application
1: Controller
2: dao
3: sql
4.thingsboard代码类及接口说明
[相关代码类controller说明 , 文档使用了swagger
1: 管理控制器(admin-controller):管理控制器显示
2: 报警控制器(alarm-controller):报警控制器显示
3: 资产控制器(asset-controller):资产控制器显示
4: 审核日志控制器(audit-log-controller):审核日志控制器显示
5: 身份验证控制器(auth-controller):身份验证控制器显示
6: 组件描述符控制器(component-descriptor-controller):组件描述符控制器显示
7: 客户控制器(customer-controller):客户控制器显示
8: 仪表板控制器(dashboard-controller):仪表板控制器显示
9: 设备API控制器(device-api-controller):设备API控制器显示
10: 设备控制器(device-controller):设备控制器显示
11: 实体关系控制器(entity-relation-controller):实体关系控制器显示
12: 实体视图控制器(entity-view-controller):实体视图控制器显示
13: 事件控制器(event-controller):事件控制器显示
14: RPC控制器(rpc-controller):RPC控制器显示
15: 规则链控制器(rule-chain-controller):规则链控制器显示
16: 遥测控制器(telemetry-controller):遥测控制器显示
17: 租户控制器(tenant-controller):租户控制器显示
18: 用户控制器(user-controller):用户控制器显示
19: 控件类型控制器(widget-type-controller):控件类型控制器显示
20: 控件束控制器(widgets-bundle-controller):控件束控制器显示
详情运行thingsbroads项目后:输入地址查阅http://localhost:8080/swagger-ui.html
第二章 thingsboard涉及到的流程图
- 物联网网关架构
对平台来说网关是一个设备:只不过网关的消息体和其他设备不一样,网关监听的是消息代理发送的消息。针对MQTT来说,网关只不过选择性监听了topic,构建了一个映射“map”关系。
网关详情:https://thingsboard.io/docs/iot-gateway/what-is-iot-gateway/
2. ThingsBoard微服务架构
thingsboard微服务构架详情:https://thingsboard.io/docs/reference/msa/
3. Thingsboard产品架构
设备接入:MQTT、CoAP、HTTP
规则引擎:配置设备消息的处理流程
核心服务:设备认证、规则和插件、租户和客户、小组件和仪表盘、告警和事件
服务端API网关:REST API、websockets
Actor模型:主要用于并发
集群模式:Zookeeper用于服务发现,一致性哈希保证消息的扩展性和可用性。
安全:SSL用于HTTP和MQTT
设备认证:Token和X.509
第三方工具:AKKA【Actor】、Zookeeper、gRPC、Cassandra
4. Thingsboard规则引擎
Rule Engine是一个易于使用的框架,用于构建基于事件的工作流。有3个主要组成部分:
任何传入的事件。它可以是来自设备的传入数据,设备生命周期事件,REST API事件,RPC请求等。
在传入消息上执行的功能。有许多不同的Node类型可以对传入的Message进行过滤,转换或执行某些操作。
节点通过关系相互连接,因此来自规则节点的出站消息被发送到下一个连接的规则节点。
规则引擎详情说明: https://thingsboard.io/docs/user-guide/rule-engine-2-0/re-getting-started/
5. ThingsBoard Architecture
ThingsBoard旨在跨多个节点分配工作负载,而不会出现单点故障。每个ThingsBoard节点都是相同的,可以处理来自设备和服务器端应用程序的请求
描述图
详情请看:https://thingsboard.io/docs/reference/architecture/
第三章 项目框架涉及到的第三方包或插件
- Thingsboard 包
Redis2.9.0.jar 略*
Snakeyaml.jar 解析yaml
snappy-java.jar Snappy是Google开源的压缩/解压缩库
Js-beautify.jar Einar Lielmanis开发的在线javascript代码格式化工具。Einar在github上开源了这个项目的代码,并加入了格式化html代码的支持。
Testcontainers-1.9.1.jar Testcontainers是一个Golang库,提供一个友好的API来运行Docker容器
Spring-Websocket.jar 浏览器与服务端建立全双工的通信方式,解决http请求-响应带来过多的资源消耗,同时对特殊场景应用提供了全新的实现方式,比如聊天、股票交易、游戏等对对实时性要求较高的行业领域。
Spring-webmvc.jar 关于Spring相关略.
String-data-jpa.jar 数据库访问层,业务查询sql在thingsboard路径:thingsboard\thingsboard-release-2.3\dao\src\main\java\org\thingsboard\server\dao\sql
实体类与数据表关联:thingsboard\thingsboard-release-2.3\dao\src\main\java\org\thingsboard\server\dao\model\sql
Lombok.jar 插件 Lombok是通过注解的形式帮我们简化java 代码,在项目中使用比如说getter/setter/toString等方法的编写,(idea 或eclipse需要安装 lombox插件)
Postgresql-9.4.2.jar Postgresql数据库对象关系数据库管理系统.
Jbcrypt-0.3m.jar 加解密工具 jBCrypt
详解: java版Bcrypt ,加解密工具 (用于账号密码加密,被时间检证过了) ,对用户的口令进行Hash,并使用salt,以防止Rainbow 攻击(Hash算法可用MD5或SHA1等,对口令使用salt的意思是,user 在设定密码时,system 产生另外一个random string(salt)。在datbase 存的是与salt + passwd 产的md5sum 及salt。当要验证密码时就把user 输入的string 加上使用者的salt,产生md5sum 来比对。理论上用salt 可以大幅度让密码更难破解,相同的密码除非刚好salt 相同,最后存在database 上的内容是不一样的。使用慢一点的Hash算法来保存口令,如 bcrypt (被时间检证过了) 或是 scrypt (更强,但是也更新一些)。
代码:
String password = "testpassword";String hashed = BCrypt.hashpw(password, BCrypt.gensalt());System.out.println(hashed);
Json.jar 略*
Hsqldb.jar (在thingsboard中基本用于thingsboard-demo演示)
HSQLDB是一款Java内置的数据库,非常适合在用于快速的测试和演示的Java程序中,
HSQLDB有三种模式:
1. Server 就像Mysql那样
2. In-Process 又叫做 Standalone 模式,数据放在本地文件,伴随JVM一起启动,是HSQLDB的主要应用场景
3. Memory-only, 仅仅在内存中,一旦重启,数据就消失。
Rest-5.0.2.jar REST其实是一种组织Web服务的架构,而并不是我们想象的那样是实现Web服务的一种新的技术,更没有要求一定要使用HTTP。其目标是为了创建具有良好扩展性的分布式系统.
Mqttv3-1.1.0.jar 用于开发mqtt的客户端使用,方便快速搭建mqtt客户端,快速开发实现所需要功能.
jackson-mapper-asl-1.9.13.jar java对象和json相互转化,有jackson-core-asl、jackson-mapper-asl
xmlbeans-2.6.0.jar XMLBeans是一个XML-Java绑定工具,利用它可以很方便地解析XML文档。
Poi*.jar poi相关jar包 如execl、xlsx、pptx、docx 等文件导入导出等操作。
kafka-clients.2.0.0.jar kafka消息中间件
httpcore-nio-4.4.5.jar HTTP协议实现包, 相关http包
JOpt Simple 4.6.jar JOpt Simple 是一个简单的、测试驱动的命令行解析器,支持 POSIX getopt() 和 GNU getopt_long()
json-smart2.0.jar Json-smart 是一个高性能的JSON处理类库
1. 易于使用:Calendar让获取"正常的"的日期变得很困难,使它没办法提供简单的方法,而Joda-Time能够 直接进行访问域并且索引值1就是代表January。
javax.annotation-api-1.2.jar 包,注解,声明,@Resource是做bean的注入使用。
*-swagger-*.jar 可以跟据业务代码自动生成相关的api接口文档.
aopalliance.jar 这个包是AOP联盟的API包,里面包含了针对面向切面的接口。aopalliance.jar作用为通常Spring等其它具备动态织入功能的框架依赖此包.
Logback-classic-1.2.3.jar log4j项目的后续版本,用于打印error系统日志
dom4j-1.6.1.jar Dom4j是一个Java的XML API接口,是jdom的进化版,dom4j基本用来读写xml文件,Hibernate也用它来读写配置文件。
grpc-context-1.12.0.jar grpc是一个高性能、开源和通用的 RPC 框架,远程调用。
Netty-3.10.5.Final.jarNetty 可自定义通讯协议, 是一个基于NIO的客户、服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户,服务端应用。Netty相当简化和流线化了网络应用的编程开发过程,例如,TCP和UDP的socket服务开发。
Cassandra 作为可扩展且可靠的数据库,是一个来自 Apache 的分布式数据库,具有高度可扩展性,可用于管理大量的结构化数据。它提供了高可用性,没有单点故障。
第四章 ThingsBoard设备连接协议
- 订阅消息传递协议(MQTT)
MQTT是一种轻量级的发布 - 订阅消息传递协议,可能使其最适合各种物联网设备。您可以在此处找到有关MQTT的更多信息。
ThingsBoard服务器节点充当MQTT Broker,支持QoS级别0(最多一次)和1(至少一次)以及一组预定义主题。
0x00已连接 - 已成功连接到ThingsBoard MQTT服务器。
0x05连接被拒绝,未经授权 - 用户名包含无效的$ ACCESS_TOKEN。
消息传递格式详情链接参照官网链接:https://thingsboard.io/docs/reference/mqtt-api/
2. 请求响应模式(CoAP)
CoAP是用于受限设备的轻量级物联网协议,CoAP协议基于UDP,但与HTTP类似,它使用请求 - 响应模型。CoAP观察选项允许订阅资源并接收有关资源更改的通知。
ThingsBoard服务器节点充当CoAP服务器,支持常规和观察请求。
消息传递格式详情链接参照官网链接:https://thingsboard.io/docs/reference/coap-api/
3. 请求响应模式(HTTP )
HTTP是可用于IoT应用程序的通用网络协议,HTTP协议是基于TCP的,并使用请求 - 响应模型。ThingsBoard服务器节点充当支持HTTP和HTTPS协议的HTTP服务器。
400 Bad Request - 无效的URL,请求参数或正文。
401 Unauthorized - $ ACCESS_TOKEN无效。
消息传递格式详情链接参照官网链接:https://thingsboard.io/docs/reference/mqtt-api/
第五章 ThingsBoard打包
- 后端打包
mvn clean install -DskipTests
第六章 ThingsBoard框架日志
如在liunx上部署:日志文件以年月日日期呈现出文件夹结构,方便查阅, 日志使用的是logback。
第七章 ThingsBoard数据库
[thingsBoard使用的data-jpa]
- 关系数据库(使用了2个数据库)
redis在ThingsBoard中的使用场景。使用场景主要存储设备终端信息,临时存储。
第八章 官网主要文档目录
1.规则引擎
https://thingsboard.io/docs/user-guide/rule-engine/
2.HTTP连接设备
https://thingsboard.io/docs/reference/http-api
3.MQTT连接设备
https://thingsboard.io/docs/reference/mqtt-api
范例
thingsboard.io/docs/user-guide/rule-engine-2-0/tutorials/validate-incoming-telemetry
4.Thingsboard网关连接设备
https://thingsboard.io/docs/user-guide/rule-engine-2-0/tutorials/validate-incoming-telemetry
第九章 前端技术概述
- 前端包括哪些技术点
包括: Angularjs、ES6、Reactjs、webpack
前端MVC、MVVM框架
前端打包方案
前端包依赖管理
前后端通信方式
单元测试方案
第十章 关于Thingsboard开发环境部署
1:确保本地未运行Thingsbaord演示版本(会干扰开发模式下的bean创建和rpc)
2:github上拉取项目
https://github.com/thingsboard/thingsboard.git
切换分支到2.5.1版本
git checkout v2.5.1
3:idea克隆或下载后导入,maven插件先运行clean后再运行compile:
mvn clean install -DskipTests (编译并跳过测试)
mvn install -rf :ui -DskipTests (从上次中断处再次运行并跳过测试)
4:插件安装success后,正确配置application.yml文件
application.yml文件若有需求,则根据相应需求修改5处,分别为:
- zk:xxx.xxx.xxx.xxx:2181
- cassandra:xxx.xxx.xxx.xxx:9042
- redis:xxx.xxx.xxx.xxx:6379
- postgresql:xxx.xxx.xxx.xxx:5432
- kafka:xxx.xxx.xxx.xxx:9092
5:运行ThingsboardServerApplication启动运行环境。
CSDN这个编辑器变得有点难受emmmm......
不想详细写了
改天把数据库设计文档和二开手册还有安装部署手册重新写一下就不在CSDN上写了,这个富文本编辑插件没以前的好用
Thingsboard 2.5 CE版本项目结构说明相关推荐
- thingsboard2.5 CE版本数据库设计说明
Thingsboard 2.5 CE 数据库设计说明(DBDD) 文档修订历史记录 版本 日期 AMD 修订者 说明 1.0 2018-07-08 A 琉璃 初稿 (A-添加,M-修改,D-删除) 数 ...
- Android 项目结构说明
Android 项目结构说明 创建Android项目后,期目录结构如图 下面对图中的包和文件进行说明. 1.scr包 在scr包中,保存的是应用程序的源代码,如Java文件和AIDL文件. 2.g ...
- 【转载】C#编码标准━━项目设置和项目结构
1.总是在4级警高上建立你的项目. 2.在发布版(Release)中,把警告当成错误来对待(注意这并不是 Visual Studio的默认选项).我们建议在调试版(Debug)中也这样设置,尽管这不是 ...
- Flutter入门二——项目结构及配置文件简介
前言 环境搭建完成之后,我们来看看Flutter:New Project后生成的项目结构. 具体环境搭建可以参考:w7上使用VSCode配置Flutter开发环境 项目结构 pubspec.yaml配 ...
- ASP.NET Core 2.0 : 三. 项目结构
ASP.NET Core 2.0 : 三. 项目结构 原文:ASP.NET Core 2.0 : 三. 项目结构 本章我们一起来对比着ASP.NET Framework版本看一下ASP.NET Cor ...
- python3项目-Python3基础教程(十九)—— 项目结构
本节阐述了一个完整的 Python 项目结构,你可以使用什么样的目录布局以及怎样发布软件到网络上. 创建Python项目 我们的实验项目名为 factorial,放到 /home/shiyanlou/ ...
- Android Studio 使用Eclipse项目,仍保留项目结构,非导入转成gradle
2019独角兽企业重金招聘Python工程师标准>>> 目前Android项目基本都转成Gradle,但仍有不少停留在Eclipse或习惯于Eclipse生成的项目结构.其实Andr ...
- ASP.NET中MVC默认模板的项目结构
场景 ASP.NET中MVC编程模式简介与搭建HelloWorld项目: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10679 ...
- 面试必会系列 - 11.1 一文读懂Maven:Maven工程类型、项目结构、工程关系、常见命令等
本文已收录至 Github(MD-Notes),若博客中图片模糊或打不开,可以来我的 Github 仓库,包含了完整图文:https://github.com/HanquanHq/MD-Notes,涵 ...
最新文章
- LeetCode实战:只出现一次的数字
- python双下划线用法详解
- 注入式开发(二):.NET 匿名函数
- Spring MVC零配置(全注解)(版本5.0.7)
- python在画布上写文字大小_Tkinter:在画布上缩放项目
- 1130-host ... is not allowed to connect to this MySql server登录失败
- STL之Iterator(迭代器)
- 白盒-CNN纹理深度可视化: 使用MIT Place 场景预训练模型
- [转]svn常用命令
- 为什么要使用Entity Framework
- 利用html制作通讯录_动漫制作软件哪些好用?动漫制作软件推荐
- 商城项目数据库设计中订单表
- 自制工具:CSV代码生成器:自动生成CSV文件对应的C++实体类和字段类型解析代码
- Java调用Gdal写Esri ShapeFile文件工具类
- 电动自行车新国标正式发布,推动电池产业转型升级
- 邮件营销技巧和经验分享
- 常用的数据统计分析软件
- 深入 JavaScript 中的默认参数!
- android数字转汉字大写字母,将数字金额转成汉字大写的
- 7-1 sdut-Collection(Map)-1 读中国载人航天史,汇航天员数量,向航天员致敬