概述

一方面出于工作需求,另一方面出于个人的提升,需要搭建一套相对简单清晰的微服务框架。
需求如下:

  1. 服务能够模块化,并且各个服务相对独立(应该算是微服务的基本要求了)
  2. 整体架构逻辑简单(由于对于流量的要求没有那么高,所以会砍掉一些类似熔断降级的组件)
  3. 模块开发成本低(对于注册/配置/权限等功能应该自继承,新开模块等时候应该不需要再额外配置太多内容)

翻看了各方资料,以及比对了一些现有的框架系统。最后希望搭建一套nacos+dubbo+gateway+vue3的框架。

实现

工程结构图

微服务架构云化指南 微服务架构搭建_微服务


大致结构如上图,前端暂时不细分(可考虑一个大前端,业务功能以模块的形式达成一个整包;或者,一个大前端,内嵌页面引向其他业务模块的地址页面),这个后面具体实现的时候再详细设计

  • nacos作为注册中心和配置中心;
  • 搭建网关服务,作为前后端交互的入口,注册在注册中心中;
  • 权限中心负责提供用户权限,控制接口权限与前端的路由清单,注册在注册中心中;
  • 业务模块按需实现

项目搭建

  1. 创建maven工程
  2. 创建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>
  1. 创建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>
  1. 创建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>
  1. 创建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文件外,还有其他配置文件和启动类,因为比较多,后面每个章节介绍一个模块的实现。

目前先看下整体工程结构

微服务架构云化指南 微服务架构搭建_前端_02


然后我们先搭建一个nacos服务端,也就是最前面的结构图中,绿色部分的应用。这个应用直接根据nacos官网提供的教程搭建就好,步骤很简单(本来还想要引入包的方式,自己去做一些页面上的改造,但是发现比较麻烦,所以暂缓)。

搭建方式:https://nacos.io/zh-cn/docs/quick-start.html 搭建完成后,登录名/密码是:nacos/nacos,进入后就能看到管理页面

微服务架构云化指南 微服务架构搭建_微服务架构云化指南_03


到这一步大家可以先为自己的工程写几个配置文件

微服务架构云化指南 微服务架构搭建_微服务架构云化指南_04


类似这样的,提供后面其他模块启动使用。

到这一步为止注册中心和配置中心搭建完成了。

下一步我们搭建网关服务。