Skip to content

Latest commit

 

History

History
164 lines (130 loc) · 4.51 KB

整体.md

File metadata and controls

164 lines (130 loc) · 4.51 KB

环境准备

  • release-3.2分支源码
  • IDE Idea或Eclipse,本文使用Idea

准备

使用Idea打开源码工程。

工程结构

分析

整个工程由Maven进行生命周期管理,因为工程根目录有pom.xml,打开pom.xml,核心内容有以下几段:

  • modules

      <modules>
          <module>netty-mqtt</module>
          <module>common</module>
          <module>rule-engine</module>
          <module>dao</module>
          .......
      </modules>
    

    表明是maven的父子工程,子工程包含netty-mqttcommonrule-enginedaotransportui-ngxtoolsapplicationmsarest-client

    • netty-mqtt:netty实现的mqtt客户端
    • common:公共基础类
    • rule-engine:规则引擎
    • dao:数据存取对象
    • transport:协议
    • ui-ngx:前端
    • tools:一些工具
    • application:应用,看着应该是入口
  • Profiles

      <profiles>
          <profile>
              <id>default</id>
              <activation>
                  <activeByDefault>true</activeByDefault>
              </activation>
          </profile>
          ......
      </profiles>
    

    表明有几种自定义环境,从id上看,包含defaultdownload-dependenciespackaging

    • default:默认,默认处于激活状态
    • download-dependencies:下载依赖
    • packaging:打包,默认处于激活状态
  • denpendencies

      <dependencies>
          <dependency>
              <groupId>org.projectlombok</groupId>
              <artifactId>lombok</artifactId>
              <scope>provided</scope>
          </dependency>
      </dependencies>
    

    依赖lombok包,看到这个就明白Idea需要安装lombok插件,且因为不再dependencyManagement标签对中,所以子工程继承该依赖。

  • dependencyManagement

    <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.thingsboard</groupId>
                    <artifactId>netty-mqtt</artifactId>
                    <version>${project.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.thingsboard.common</groupId>
                    <artifactId>data</artifactId>
                    <version>${project.version}</version>
                </dependency>
                ......
            </dependencies>
    </dependencyManagement>        
    

    子工程可选继承的大量依赖。

  • repositories

    <repositories>
            <repository>
                <id>central</id>
                <url>https://repo1.maven.org/maven2/</url>
            </repository>
            <repository>
                <id>spring-snapshots</id>
                <name>Spring Snapshots</name>
                <url>https://repo.spring.io/snapshot</url>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
            </repository>
            ......
    </repositories>
    

    仓库的依赖,中央仓库是https://repo1.maven.org/maven2/,然后是一些Spring 仓库等。

结论

通过基础的工程分析,可以得出以下结论:

  • 工程是一个基于maven的父子工程
  • 工程有profile机制
  • 工程使用了lombok
  • 工程使用了以下核心技术(仔细分析denpendencies)
    • spring-boot (主框架)
    • spring-security (安全认证框架)
    • jjwt(jwt token认证)
    • java-websocket(websocket支持)
    • swagger及swagger ui (Restful Web服务框架)
    • junit(单元测试)
    • slf4j(门面日志)
    • logback(日志框架)
    • guava(基本工具)
    • metrics(指标统计)
    • bucket4j(限流)
    • caffeine(内存缓存)
    • jedis(reds客户端)
    • jackson(json序列化和反序列化)
    • Protobuf(序列化和反序列化)
    • snakeyaml(yaml序列化和反序列化)
    • paho(mqtt客户端)
    • curator(zookeeper客户端)
    • zookeeper(分布式应用协调服务)
    • kafka(消息队列客户端)
    • rabbitmq(消息队列客户端)
    • grpc(RPC通信框架)
    • netty(网络通信框架)
    • cassandra(Nosql数据库驱动)
    • postgresql(关系型数据库驱动)
    • hsqldb(一种Java嵌入式关系型数据库)
    • elasticsearch(搜索引擎客户端)

TIPS

  • 除了介绍的子工程以外,从根目录中还可以找到dockerimgk8s三个子目录
    • docker:Docker方式启动的相关脚本和配置
    • img:一张logo图片
    • K8s:Kubernetes方式启动的相关脚本和配置