ThingsBoard作为一个优秀的开源物联网SaaS平台经过7年左右的发展在国内外都有着较高的评价,在国内也有头部企业对它进行生产应用,技术研究这一切都得益于足够的包容和使用众多优秀的开源技术进行构建。根据国内的一些企业结合自身的业务特点和需求必须要对它进行一些二次开发(定制开发)才能符合要求,由于ThingsBoard开源物联网平台的架构和技术栈的一些特点导致爱好者或者技术人看见相关代码就犯难、发怵无法进行二次开发,这里我个人直接用传统MVC(Model-View-Controller)的方式进行理解最终总结出一个简单的结构图。
ThingsBoard是一个前端构建在一起的项目可以通过maven命令将其打包成一个jar包进行单体部署,如果你要进行二次开发必须要将所有项目都能编译通过才行,很多爱好者想了解如何接入百万设备、海量并发这些其实官方已经在文档说明了需要通过集群方式进行只要你有足的基础设施和硬件资源是可以实现的,关于如何快速部署一个集群起来可以了解minikube,openshift,helm等方式,当然你只是想了解一下集群想跑来的看看推荐docker-compose(生产不推荐)因为通过compose更多的是用在单节点容器编排。
1.架构说明
ThingsBoard的源代码结构分为功能源代码和架构源代码两个部分,就需求定制开发而言只要掌握了功能源代码开发流和技巧就可以轻松的实现扩展,官方也没有介绍如何进行二次开发而相关的架构图都是设备数据接入,规则处理等这就让身复杂的技术更加抽象了。
2.技术栈
前端:从3.3版开始官方也使用typescript做为前端开发语言通过Angular Material主题进行开发对开发者要求必须会ts和Material并了解如下技术。
- Angular
- router
- module
- component
- service
- pipe
- zone
- Angular Material(组件库)
- NGRX(响应式状态管理)
- RxJS(异步编程)
后端:数据持久化使用Data JPA的ORM方式这一点是很多java开人员不愿意花时间去学习的,因为他们认识会有更多的学习成本,其实不用学习太多只要你掌握repository即可但是必须要了解如下技术。
- Spring Data JPA
- Repository JPQL
- Actor
- ListenalbeFuture
3.UML
通过源代码可以分析出数据交互是通过repository进行数据查询给JPADao继续给Service服务后最终将数据通过controller暴露给应用。
4.工具
- open jdk 11用于编译运行
- maven3.6.0+
- IDE推荐Idea编写代码和运行
- 浏览器推荐使用Chorme
- 容器引擎推荐使用Docker
- mqtt客户端推荐使用MqttBox