Thingsboard 2.5 CE版本项目结构说明

11 篇文章 2 订阅
10 篇文章 2 订阅

 

版本

发布时间

修订章节

作者

1.0

20171118

[对修订章节的描述从最近的一次修订开始]

琉璃

1.1

20190318

[版本升级修改]

琉璃

2.0

20200707

[TB2.5版本最新版本修改]

琉璃

 

 

 

 

 

参考资料 :

接口文档:

  • 运行thingsboard服务后,在浏览器地址栏输入:http://localhost:8080/swagger-ui.html (进入swagger接口说明);

编写目的

  • 编写此文档的目的是让开发人员对thingsboard框架快速的理解。

 

第一章 项目框架整理说明

  1. 项目框架说明

整体架构图如下:

 

系统功能结构图如下:

框架包含了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涉及到的流程图

  1. 物联网网关架构

对平台来说网关是一个设备:只不过网关的消息体和其他设备不一样,网关监听的是消息代理发送的消息。针对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/

 

第三章 项目框架涉及到的第三方包或插件

  1. 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设备连接协议

  1. 订阅消息传递协议(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打包

  1. 后端打包

mvn clean install -DskipTests

第六章 ThingsBoard框架日志

如在liunx上部署:日志文件以年月日日期呈现出文件夹结构,方便查阅, 日志使用的是logback。

 

第七章 ThingsBoard数据库

[thingsBoard使用的data-jpa]

    1. 关系数据库(使用了2个数据库)

1、PostgreSQL:用于数据存储

2、Cassandra:用于数据存储

3、Datasta:用于数据访问

    1. 非关系数据库(redis)

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

 

第九章 前端技术概述

    1. 前端包括哪些技术点

包括: Angularjs、ES6、Reactjs、webpack

    1. 前端技术描述

前端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处,分别为:

  1. zk:xxx.xxx.xxx.xxx:2181
  2. cassandra:xxx.xxx.xxx.xxx:9042
  3. redis:xxx.xxx.xxx.xxx:6379
  4. postgresql:xxx.xxx.xxx.xxx:5432
  5. kafka:xxx.xxx.xxx.xxx:9092

5:运行ThingsboardServerApplication启动运行环境。

 

 

CSDN这个编辑器变得有点难受emmmm......

不想详细写了

改天把数据库设计文档和二开手册还有安装部署手册重新写一下就不在CSDN上写了,这个富文本编辑插件没以前的好用

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值