前言
最近项目开始用微服务了,之前并没有真正使用过微服务。所以这里把这次项目搭建的基础框架学习借鉴一下,搭建一个简单的微服务实践项目,以博客系统为例,分为网关、权限中心、用户中心、博客中心四个微服务项目。下面是整个项目的具体框架结构:
工程依赖
- springboot,springcloud,等开源框架;
- base-sdk,base-log-spring-boot-starter为私有的基础依赖工程,工程地址:https://gitee.com/AfterTheFall/kite-sdk。具体的要做的就是把这个项目克隆到本地,然后maven编译安装到本地仓库,就可以了。
工程结构
工程 | 端口 | 描述 |
---|---|---|
base | 无 | 工程基础依赖 |
auth-center | 8011 | 权限中心 |
blog-center | 8012 | 博客中心 |
user-center | 8013 | 用户中心 |
gateway | 8010 | 微服务网关 |
项目结构
如上面工程结构所述,项目框架如下,主要有三个服务项目:权限中心、博客中心、用户中心。
*-client为对外提供的微服务接口,对外提供的服务接口统一在-client的feign包下。
*-server为项目启动程序入口。
base为基础依赖模块。
网关为微服务外部统一访问入口。
工程初始化搭建
新建一个maven项目,由于是多模块项目,新建之后删除src目录,后边在项目里新增model。项目顶级pom.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.kite</groupId>
<artifactId>kite-blog</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.3.RELEASE</version>
<relativePath/>
</parent>
<!-- 全局版本配置 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.RELEASE</spring-cloud.version>
<mysql-connector>5.1.39</mysql-connector>
<mybatis-plus.version>3.4.0</mybatis-plus.version>
<junit-version>4.13-rc-1</junit-version>
<druid.version>1.1.14</druid.version>
<hutool.version>5.1.0</hutool.version>
<hikariCP.version>3.4.5</hikariCP.version>
<spring-boot-test.version>2.3.3.RELEASE</spring-boot-test.version>
<redission-spring-boot.version>3.13.4</redission-spring-boot.version>
<spring-session-data-redis.version>2.2.3.RELEASE</spring-session-data-redis.version>
<nacos.version>2.2.1.RELEASE</nacos.version>
<swagger2.version>2.9.2</swagger2.version>
<swagger2-ui.version>2.9.2</swagger2-ui.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>${redission-spring-boot.version}</version>
</dependency>
<!-- 统一引入 可用于刷新配置信息 健康检查 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- 统一引入 当前依赖需要 IDEA 安装 lombok 插件配合使用 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<!-- 统一引入 引入单元测试 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
<version>${spring-boot-test.version}</version>
</dependency>
<!-- 统一引入 引入hutool 帮助类 -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- nacos做服务发现 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${nacos.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger2.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger2.version}</version>
</dependency>
<!-- 引入bask-sdk包,对全局的请求响应类进行了封装,可快速扩展 -->
<dependency>
<groupId>cn.kite</groupId>
<artifactId>base-sdk</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- 引入基于拦截器实现的请求响应日志打印starter包,可以直接打印所有业务接口的请求日志 -->
<dependency>
<groupId>cn.kite</groupId>
<artifactId>base-log-spring-boot-starter</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</dependencyManagement>
<!--<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>-->
<modules>
<module>user-center</module>
<module>base</module>
<module>blog-center</module>
<module>gateway</module>
<module>auth-center</module>
</modules>
</project>
基础依赖工程(base)
这个模块里主要就是基础通用的POJO对象,以及springboot的全局异常,因为其他服务项目都要做全局异常处理,所以写在这里,其他项目依赖这个模块,扫描到对应包就可以加载相应功能。
base的pom.xml如下,这是其他项目都需要依赖的基础模块,所以在这里引入了springboot,Redis,MySQL等通用的依赖包:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>kite-blog</artifactId>
<groupId>cn.kite</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>base</artifactId>
<description>公共基础包</description>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--统一引入 引入 openfeign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
</dependency>
<!-- 引入bask-sdk包,对全局的请求响应类进行了封装,可快速扩展 -->
<dependency>
<groupId>cn.kite</groupId>
<artifactId>base-sdk</artifactId>
</dependency>
<!-- 引入基于拦截器实现的请求响应日志打印starter包,可以直接打印所有业务接口的请求日志 -->
<dependency>
<groupId>cn.kite</groupId>
<artifactId>base-log-spring-boot-starter</artifactId>
<!-- 排除掉base-log-spring-boot-starter里依赖的springboot包 -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>
base模块结构
主要是一些全局通用实体及相关工具类。reuse包,为微服务跨服务参数传递的实现,在我的这篇文章()有具体说明。
项目地址
https://gitee.com/AfterTheFall/springcloud-kite-blog