- 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-mqtt
、common
、rule-engine
、dao
、transport
、ui-ngx
、tools
、application
、msa
、rest-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上看,包含
default
、download-dependencies
、packaging
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(搜索引擎客户端)
- 除了介绍的子工程以外,从根目录中还可以找到
docker
、img
、k8s
三个子目录- docker:Docker方式启动的相关脚本和配置
- img:一张logo图片
- K8s:Kubernetes方式启动的相关脚本和配置