谷动谷力

 找回密码
 立即注册
查看: 2298|回复: 0
打印 上一主题 下一主题
收起左侧

IoT开源平台Thingsboard二次开发研究

[复制链接]
跳转到指定楼层
楼主
发表于 2020-12-8 14:08:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 鸣涧_GC96O 于 2020-12-8 14:15 编辑

IoT开源平台Thingsboard二次开发研究



ThingsBoard 二次开发指南参考资料

TB官方文档(英文)
Protobuf的讲解
概述  
1 整个ThingsBoard的代码中,变量、方法命名规范;
2 变量和方法的标识符,字面意思基本能表达整个方法或变量的功能或目的;
3 TB采用了模块化开发来实现松耦合、高内聚。每个模块之间有一定的依赖;
4 微服务集群的容器使用Docker,容器编排使用k8s;
5 使用了Actors编程模型(AKKA框架)(纯异步)、事件驱动模型;

二开团队知识储备


      MQTT协议 & MQTT Broker(重要)
        CoAP协议
        HTTP协议(除get/post之外的动作)
        WebSocket协议
        RESTFUL 设计规范
        TCP/IP协议簇
        IoT Gateway    规则引擎概念与设计
        Actors编程模型理论
        Google Protocol Buffer 原理与使用
        AKKA框架
        Netty
        kafka
        PostgreSQL数据库
        Nodejs
        Vue SPA套件(UI重制)


目录结构

    application: 应用程序主目录,整体项目打包时也是这个Module
      src/main/java/org.thingsboard.server: app主目录
            actors: actor执行者目录
          config: 配置类目录
          controller: 控制器
          exception: 异常处理
           service: 服务目录,app打包后,server要运行的服务的实现都在这里
           cluster: 集群服务,包括服务发现、服务实例等
           script: 脚本执行服务,主要是规则引擎的执行(JS)
           transport: 消息传输服务
                rpc: 远程调用服务
            utils: 工具类
           common: 公共工具集、方法集模块
        dao-api: 数据访问对象的服务接口,在这里做定义
        data: 用于不同数据库之间的中间数据结构
        message: 消息服务的实现集,包括集群消息、TB的基础服务消息、系统类消息
      queue: 队列服务的实现集,用的Kafka
        transport: 消息传输通道服务的实现,定义公共接口,给客户端的transport层使用
            coap: CoAP消息传输的实现,包括适配器和客户端
            http: HTTP消息传输的实现
            mqtt: MQTT消息传输的实现,包括适配器、会话、SSL工具等
        util: 工具集(当前仅有一个异步回调工具)
    dao: 数据访问对象集合,整个应用的DAO层,一般只要dao的都要data,以实现不同数据库数据结构兼容。docker: 集群部署-docker容器解决方案,包含了部署环境和shell脚本
      haproxy: HAproxy工具的配置文件存放处
        tb-node: 应用程序节点配置存放目录
        tb-transports: 消息传输服务的配置文件,包括coap,http,mqtt
    img: 应用图标存放处
    k8s: 容器编排工具Kubernetes的配置文件和自动化脚本
    msa: 微服务半自动构建模块,包含了黑盒测试、js执行引擎等
        black-box-tests: 黑盒测试工具
        js-excutor: js执行引擎,基于nodejs,用于执行规则引擎中的js代码(沙盒执行)    tb: tb主应用程序配置    tb-node: tb程序节点配置
        transport: docker中的消息传输服务的部署配置
        web-ui: TB的Web用户界面在docker中部署的配置,自带http server
        netty-mqtt: TB的MQTT协议的实现,包括连接、发布、订阅、遗嘱、关闭等
        rule-engine: TB的规则引擎,TB没有用开源的Drools等工具,而是自己开发了一套规则引擎,主要包含3个组件和1套服务接口   
    rule-engine-api: 服务接口的实现
        rule-engine-components: 规则引擎组件,包含滤波器、动作、数据、脚本、延迟加载、消息、队列、RPC实现、邮件等
    tools: 工具模块,主要实现了MQTT with SSL客户端和REST客户端。可以测试用。
    transport: 三种消息传输服务启动器,服务的实现参考common/transport,mqtt协议的实现见netty-mqttui: TB的用户界面,主要使用AngularJS和react组件,单页应用(要替换掉,用Vue)



所需IDE插件

IDEA Plugins
    protobuf    lombok

    1
    2

打包

    TB将所有模块打包,以application为根模块,打包成多个平台的安装包。


运行

    TB以系统服务的方式运行:
    CentOS/Redhat-------thingsboard.rpm
    Debian--------thingsboard.deb
    Windows------thingsboard-windows.zip


常见问题

一、 mvn clean install到Server UI出现npm install无法执行的错误:
        结束Java binary进程后,用管理员权限运行Terminal(cmd或powershell或shell等)环境,最好不要更改npm源,        开全局代理,依次用以下方法:
        1 更改UI,js-executor,web-ui下的pom.xml,将nodeVersion和npmVersion改成和本机版本一致。
        如果上述方法不行
      2 删除本机Nodejs,重新执行。
        如果还不行
        3 跳过无法insall的项目,手动

    npm install,npm run build


。执行逻辑在各自的pom.xml中。

二、IDE打开项目后,出现一大堆Error和Warning提示。
        IDE中,安装 protobuf、lombok两个plugins,重启IDE。



+10
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|深圳市光明谷科技有限公司|光明谷商城|Sunshine Silicon Corpporation ( 粤ICP备14060730号|Sitemap

GMT+8, 2024-12-28 00:01 , Processed in 0.144311 second(s), 35 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表