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包功能描述
appaction.main.java.org.thingsboard.server ThingsboardServerApplication.java(启动类)
install thingsboard服务开启相关配置、异常和调用
exception thingsboard响应错误及错误逻辑处理
controller thingsboard页面展示必要的 系统数据 接口
service 为controller提供支持
config 为同源策略、swagger、webSocket、消息及安全配置注册spring bean
Data 用于与不同db之间的中间数据结构。
Message 定义不同的消息类型。
Transport 定义一个公共的接口,供与客户端的transport层使用
dao抽象了对不同数据库的统一接口。dao的接口数据一般都data,根据不同的数据库在不同的接口中转换为对应的实体类与数据库交互.通过@ConditionalOnProperty(prefix = "database", value = "type", havingValue = "cassandra")动态注入不同的数据库
系统发布资源类
系统图片类
K8s分布式服务器部署
black-box-tests 黑盒测试
js-executor javascript执行器
tb tb核心服务包
tb-node 规则引擎
transport 传输协议
web-ui UI服务包
数据交互协议
规则引擎相关代码
Restful api客户端包
系统工具类
http Thingsboard的http传输协议启动类
coap Thingsboard的coap传输协议启动类
mqtt Thingsboard的mqtt传输协议启动类
使用到的前端技术: 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个主要组成部分:
1、消息
任何传入的事件。它可以是来自设备的传入数据,设备生命周期事件,REST API事件,RPC请求等。
2、规则节点
在传入消息上执行的功能。有许多不同的Node类型可以对传入的Message进行过滤,转换或执行某些操作。
3、规则链
节点通过关系相互连接,因此来自规则节点的出站消息被发送到下一个连接的规则节点。
规则引擎详情说明: 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
ZooKeeper 3.5.4-beta.jar ZooKeeper是一个分布式的,开源的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 Hbase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。ZooKeeper 的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
xmlbeans-2.6.0.jar XMLBeans是一个XML-Java绑定工具,利用它可以很方便地解析XML文档。
Tomcat*.jar tomcat
Libthrift-0.9.12.jar thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 这些编程语言间无缝结合的、高效的服务。
Struts*.jar struts相关包
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处理类库
Log4j-1.2.17.jar log4j
joda-time-2.3.jar Joda-Time提供了一组Java类包用于处理包括ISO8601标准在内的date和time。可以利用它把JDK Date和Calendar类完全替换掉,而且仍然能够提供很好的集成。
Joda-Time主要的特点包括:
1. 易于使用:Calendar让获取"正常的"的日期变得很困难,使它没办法提供简单的方法,而Joda-Time能够 直接进行访问域并且索引值1就是代表January。
2. 易于扩展:JDK支持多日历系统
mailapi-1.4.3.jar 发送邮件相关jar包
javax.annotation-api-1.2.jar
javax.annotation-api-1.2.jar 包,注解,声明,@Resource是做bean的注入使用。
annotation注解相关jar包略.
*-swagger-*.jar 可以跟据业务代码自动生成相关的api接口文档.
Aopalliane-10.jar
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.jar Netty 可自定义通讯协议, 是一个基于NIO的客户、服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户,服务端应用。Netty相当简化和流线化了网络应用的编程开发过程,例如,TCP和UDP的socket服务开发。
Akka 用于演员系统实施,集群-均衡负载
Cassandra 作为可扩展且可靠的数据库,是一个来自 Apache 的分布式数据库,具有高度可扩展性,可用于管理大量的结构化数据。它提供了高可用性,没有单点故障。
第四章 ThingsBoard设备连接协议
- 订阅消息传递协议(MQTT)
MQTT是一种轻量级的发布 - 订阅消息传递协议,可能使其最适合各种物联网设备。您可以在此处找到有关MQTT的更多信息。
ThingsBoard服务器节点充当MQTT Broker,支持QoS级别0(最多一次)和1(至少一次)以及一组预定义主题。
请求时返回错误代码:
用户名发送MQTT CONNECT消息,返回的错误代码:
0x00已连接 - 已成功连接到ThingsBoard MQTT服务器。
0x04连接被拒绝,用户名或密码错误 - 用户名为空。
0x05连接被拒绝,未经授权 - 用户名包含无效的$ ACCESS_TOKEN。
消息传递格式详情链接参照官网链接:https://thingsboard.io/docs/reference/mqtt-api/
2. 请求响应模式(CoAP)
CoAP是用于受限设备的轻量级物联网协议,CoAP协议基于UDP,但与HTTP类似,它使用请求 - 响应模型。CoAP观察选项允许订阅资源并接收有关资源更改的通知。
ThingsBoard服务器节点充当CoAP服务器,支持常规和观察请求。
请求时返回错误代码:
请求中,可能的错误代码及其原因:
4.00错误请求 - 无效的URL,请求参数或正文。
4.01未经授权 - $ ACCESS_TOKEN无效。
4.04未找到 - 未找到资源
消息传递格式详情链接参照官网链接:https://thingsboard.io/docs/reference/coap-api/
3. 请求响应模式(HTTP )
HTTP是可用于IoT应用程序的通用网络协议,HTTP协议是基于TCP的,并使用请求 - 响应模型。ThingsBoard服务器节点充当支持HTTP和HTTPS协议的HTTP服务器。
请求时返回错误代码:
应用程序需要在每个HTTP请求可能的错误代码及其原因:
400 Bad Request - 无效的URL,请求参数或正文。
401 Unauthorized - $ ACCESS_TOKEN无效。
404找不到资源。
消息传递格式详情链接参照官网链接:https://thingsboard.io/docs/reference/mqtt-api/
第五章 ThingsBoard打包
- 后端打包
mvn clean install -DskipTests
第六章 ThingsBoard框架日志
如在liunx上部署:日志文件以年月日日期呈现出文件夹结构,方便查阅, 日志使用的是logback。
第七章 ThingsBoard数据库
[thingsBoard使用的data-jpa]
1、PostgreSQL:用于数据存储
2、Cassandra:用于数据存储
3、Datasta:用于数据访问
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处,分别为:
5:运行ThingsboardServerApplication启动运行环境。
CSDN这个编辑器变得有点难受emmmm......
不想详细写了
改天把数据库设计文档和二开手册还有安装部署手册重新写一下就不在CSDN上写了,这个富文本编辑插件没以前的好用