概述
一方面出于工作需求,另一方面出于个人的提升,需要搭建一套相对简单清晰的微服务框架。
需求如下:
- 服务能够模块化,并且各个服务相对独立(应该算是微服务的基本要求了)
- 整体架构逻辑简单(由于对于流量的要求没有那么高,所以会砍掉一些类似熔断降级的组件)
- 模块开发成本低(对于注册/配置/权限等功能应该自继承,新开模块等时候应该不需要再额外配置太多内容)
翻看了各方资料,以及比对了一些现有的框架系统。最后希望搭建一套nacos+dubbo+gateway+vue3的框架。
实现
工程结构图
大致结构如上图,前端暂时不细分(可考虑一个大前端,业务功能以模块的形式达成一个整包;或者,一个大前端,内嵌页面引向其他业务模块的地址页面),这个后面具体实现的时候再详细设计
- nacos作为注册中心和配置中心;
- 搭建网关服务,作为前后端交互的入口,注册在注册中心中;
- 权限中心负责提供用户权限,控制接口权限与前端的路由清单,注册在注册中心中;
- 业务模块按需实现
项目搭建
- 创建maven工程
- 创建common模块,作为公共模块(仅提供包依赖,工具类等,不需要启动类)
<?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>ofa</artifactId>
<groupId>cn.wangchb</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>ofa-common</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 服务注册 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 配置中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- 数据库链接 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
</dependencies>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
</project>
- 创建auth模块,引入common与sa-token作为权限中心
<?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>ofa</artifactId>
<groupId>cn.wangchb</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>ofa-auth</artifactId>
<dependencies>
<dependency>
<groupId>cn.wangchb</groupId>
<artifactId>ofa-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- Sa-Token 权限认证, 在线文档:http://sa-token.dev33.cn/ -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot-starter</artifactId>
<version>1.30.0</version>
</dependency>
</dependencies>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
</project>
- 创建gateway,引入common与spring-cloud-gateway,作为网关服务
<?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>ofa</artifactId>
<groupId>cn.wangchb</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>ofa-gateway</artifactId>
<dependencies>
<dependency>
<groupId>cn.wangchb</groupId>
<artifactId>ofa-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
</dependencies>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
</project>
- 创建admin模块,后续作为提供可视化页面管理相关服务的模块
<?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>ofa</artifactId>
<groupId>cn.wangchb</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>ofa-admin</artifactId>
<dependencies>
<dependency>
<groupId>cn.wangchb</groupId>
<artifactId>ofa-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
</project>
以上模块除了pom.xml文件外,还有其他配置文件和启动类,因为比较多,后面每个章节介绍一个模块的实现。
目前先看下整体工程结构
然后我们先搭建一个nacos服务端,也就是最前面的结构图中,绿色部分的应用。这个应用直接根据nacos官网提供的教程搭建就好,步骤很简单(本来还想要引入包的方式,自己去做一些页面上的改造,但是发现比较麻烦,所以暂缓)。
搭建方式:https://nacos.io/zh-cn/docs/quick-start.html 搭建完成后,登录名/密码是:nacos/nacos,进入后就能看到管理页面
到这一步大家可以先为自己的工程写几个配置文件
类似这样的,提供后面其他模块启动使用。
到这一步为止注册中心和配置中心搭建完成了。
下一步我们搭建网关服务。