MemoryAPI 开发者文档 MemoryAPI 开发者文档
首页
    • 概述
    • 系统设计
    • 维护升级
    • 多元 API 生态
    • 高效 SDK 集成
    • 实时流量监控
    • 资源集中治理
    • 个人信息管理
    • 内容概览
    • Ant Design Pro 脚手架
    • OpenAPI 生成接口
    • Vuepress 静态文档站点
    • 基础信息管理
    • 丰富的接口服务
    • 高校 SDK 集成
    • Maven 聚合工程
    • Nacos 注册中心
    • Gateway 网关
    • 远程服务调用
    • API 签名认证
    • JWT 认证授权
    • Dubbo 容器部署
    • 其他核心功能
    • 定制 Spring Boot 初始模板
    • 全局业务逻辑梳理
  • 简介
  • 常见问题与解答
首页
    • 概述
    • 系统设计
    • 维护升级
    • 多元 API 生态
    • 高效 SDK 集成
    • 实时流量监控
    • 资源集中治理
    • 个人信息管理
    • 内容概览
    • Ant Design Pro 脚手架
    • OpenAPI 生成接口
    • Vuepress 静态文档站点
    • 基础信息管理
    • 丰富的接口服务
    • 高校 SDK 集成
    • Maven 聚合工程
    • Nacos 注册中心
    • Gateway 网关
    • 远程服务调用
    • API 签名认证
    • JWT 认证授权
    • Dubbo 容器部署
    • 其他核心功能
    • 定制 Spring Boot 初始模板
    • 全局业务逻辑梳理
  • 简介
  • 常见问题与解答
  • 内容概览

    • 概览
  • 前端

    • Ant Design Pro 脚手架
    • OpenAPI 生成接口
    • Vuepress 静态文档站点
  • 后端

    • 基础信息管理
    • 丰富的接口服务
    • 高效 SDK 集成
    • Maven 聚合工程
      • 🍜 单体服务架构
        • 介绍
        • 优缺点分析
      • 🥃 分布式服务架构
        • 什么是分布式服务架构
        • 如何构建分布式服务架构
      • 🌮 实现服务拆分
      • 🥩 目录结构
      • ☕ 服务配置
    • Nacos 注册中心
    • Gateway 网关
    • 远程服务调用
    • API 签名认证
    • JWT 认证授权
    • Dubbo 容器部署
    • 其他核心功能
    • 定制 Spring Boot 初始模板
    • 全局业务逻辑梳理
目录

Maven 聚合工程

学习目标

在这里,你将系统学习了解 Maven 聚合工程的相关知识

我们将以最简单直接的方式为您呈现内容!

# 🍜 单体服务架构

# 介绍

  • 我们做一个简单的学生管理系统、外卖点餐平台等等,通常在使用单体服务架构就能搞定

# 优缺点分析

# 🥃 分布式服务架构

# 什么是分布式服务架构

分布式服务架构是一种系统架构,它将应用程序的不同组件或服务分布部署在不同的计算机节点上,并通过网络进行通信和协作。这种架构的目的是实现高性能、高可用性和可伸缩性。

从专业角度来看,分布式服务架构涉及以下关键概念:

# 如何构建分布式服务架构

  • 服务拆分:首先,你需要将应用程序拆分成多个独立的服务。每个服务都应该具有明确定义的职责和边界。

  • 服务接口定义:为每个服务定义清晰的接口,以便其他服务或客户端能够调用。

  • 服务实现:为每个服务接口实现具体的逻辑。

  • 服务注册与发现:使用注册中心来存储服务的元数据,以便其他服务能够发现和调用它们。

  • 远程调用:使用 RPC(Remote Procedure Call)框架,如 Dubbo,来实现服务的远程调用。

  • 负载均衡:通过负载均衡算法,确保请求能够均匀地分配到各个服务实例上。

  • 服务监控与治理:建立监控系统以跟踪服务的性能和健康状况。此外,需要提供机制来管理和调整服务的配置。

  • 容错与高可用性:实施策略以处理服务的故障和停机时间,确保系统的高可用性。

  • 安全性:确保服务之间的通信是安全的,可能需要使用 HTTPS、OAuth、SSL/TLS 等技术。

综上所述,分布式服务架构是一种将应用程序的不同组件或服务分布部署在不同计算机节点上,并通过网络进行通信和协作的系统架构。其核心就是通过服务拆分、负载均衡、容错机制等技术手段实现高性能、高可用性和可伸缩性,以满足不断增长的业务需求。

# 🌮 实现服务拆分

  • 我们要着手将目前的单体服务通过服务拆分,重构成为分布式服务架构。拆分服务需要根据业务边界实现,我们将着手实现:

    • 拆分出 memory-backend-application 子服务:自定义丰富的接口实现。

    • 拆分出 memory-backend-common 子服务:抽象公共服务,全局的实体映射类、通用返回类、自定义错误码等。

    • 拆分出 memory-backend-gateway 子服务:实现网关,实现请求转发、统一鉴权、统一业务处理、负载均衡和访问控制等。

    • 拆分出 memory-bacnkend-core-service 子服务:实现在线用户管理、接口发布与下线、接口调用管理。

    • 拆分出 memory-backend-server-client 子服务:远程调用服务,实现内部服务间远程调用。

    • 拆分出 memory-client-spring-boot-starter 子服务,封装调用自定义接口实现代码,一行代码即可边便捷调用后台服务。

# 🥩 目录结构

本项目实现代码的目录结构如下:

memory-api-backend
|—— sql
|—— doc
|—— memory-backend-application (丰富的接口实现)
    |—— src
        |—— main
            |—— java
                ├── com.memory.client
                    ├── controller
                    ├── mapper
                    ├── model
                    ├── service
                    ├── ClientAppication
            |—— resources
                |—— mapper
                |—— application.yml   (配置文件)
                |—— application-dev.yml
                |—— application-prod.yml
                |—— banner.txt
    └── pom.xml
|—— memory-backend-common (抽取公共服务)
    |—— src
        |—— main
            |—— java
                ├── com.memory.common
                    ├── common
                    ├── constant
                    ├── exception
                    ├── model
                    ├── service.dubboService
                    ├── utils
            |—— resources
                |—— application.yml   (配置文件)
    └── pom.xml
|—— memory-backend-core-service (核心功能)
    |—— src
        |—— main
            |—— java
                ├── com.memory.api
                    ├── annotation  (自定义注解)
                    ├── aop
                    ├── config
                    ├── controller
                    ├── dataSource
                    ├── mapper
                    ├── service
                    ├── CoreAppication
            |—— resources
                |—— mapper
                |—— application.yml   (配置文件)
                |—— application-dev.yml
                |—— application-prod.yml
                |—— banner.txt
    └── pom.xml
|—— memory-backend-gateway (网关)
    |—— src
        |—— main
            |—— java
                ├── com.memory.gateway
                    ├── config
                    ├── filter
                    ├── GatewayAppication
            |—— resources
                |—— application.yml   (配置文件)
                |—— application-dev.yml
                |—— application-prod.yml
    └── pom.xml
|—— memory-backend-server-client (远程调用服务)
    |—— src
        |—— main
            |—— java
                ├── com.memory.client.feignClient
                    ├── InterfaceInfoFeignClient
                    ├── UserFeignClient
                    ├── UserInterfaceInfoFeignCient
            |—— resources
                |—— application.yml   (配置文件)
                |—— application-dev.yml
                |—— application-prod.yml
    └── pom.xml
|—— Dockerfile
|—— pom.xml
|—— READEME.en.md
└── READEME.md

# ☕ 服务配置

memory-backend-api 父工程,公共依赖:

<groupId>com.memory.api</groupId>
    <artifactId>memory-api</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging> <!-- 注意这里的packaging标签 -->

    <name>memory-api</name>
    <description>memory-api</description>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.6.13</spring-boot.version>
        <spring-cloud.version>2021.0.5</spring-cloud.version>
        <spring-cloud-alibaba.version>2021.0.5.0</spring-cloud-alibaba.version>
        <maven-compiler-plugin>3.8.1</maven-compiler-plugin>
    </properties>

    <modules>
        <module>memory-backend-core-service</module>
        <module>memory-backend-common</module>
        <module>memory-backend-application</module>
        <module>memory-backend-gateway</module>
        <module>memory-backend-server-client</module>
    </modules>
 <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>2021.0.5</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.15.4</version>
        </dependency>

      ..................................................

        <!-- lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
            <version>2.2.3</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven-compiler-plugin}</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
            </plugin>
        </plugins>
    </build>

memory-backend-application 子服务:自定义丰富的接口实现。

<parent>
        <groupId>com.memory.api</groupId>
        <artifactId>memory-api</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <groupId>com.memory.application</groupId>
    <artifactId>memory-backend-application</artifactId>
    <version>0.0.1-SNAPSHOT</version>
<dependencies>
        <dependency>
            <groupId>com.memory.common</groupId>
            <artifactId>memory-backend-common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.memory</groupId>
            <artifactId>memory-client-spring-boot-starter</artifactId>
            <version>0.0.1</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.belerweb</groupId>
            <artifactId>pinyin4j</artifactId>
            <version>2.5.1</version> <!-- 使用时检查是否有更新的版本 -->
        </dependency>
        <!-- https://doc.xiaominfo.com/knife4j/documentation/get_start.html-->
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-openapi2-spring-boot-starter</artifactId>
            <version>4.3.0</version>
        </dependency>
    </dependencies>
<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven-compiler-plugin}</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

memory-backend-common 子服务:抽象公共服务,全局的实体映射类、通用返回类、自定义错误码等。

 <parent>
        <groupId>com.memory.api</groupId>
        <artifactId>memory-api</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <groupId>com.memory.common</groupId>
    <artifactId>memory-backend-common</artifactId>
    <version>0.0.1-SNAPSHOT</version>
<dependencies>
        <!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.2</version>
        </dependency>
        <!-- 添加 openfeign 框架依赖 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.5.16</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
            <version>2.1.0</version>
        </dependency>
    </dependencies>
 <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven-compiler-plugin}</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

memory-backend-gateway 子服务:实现网关,实现请求转发、统一鉴权、统一业务处理、负载均衡和访问控制等。

 <parent>
        <groupId>com.memory.api</groupId>
        <artifactId>memory-api</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <groupId>com.memory.gateway</groupId>
    <artifactId>memory-backend-gateway</artifactId>
    <version>0.0.1-SNAPSHOT</version>
<dependencies>
        <dependency>
            <groupId>com.memory.common</groupId>
            <artifactId>memory-backend-common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.memory.client</groupId>
            <artifactId>memory-backend-server-client</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

        ...............................................

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-gateway-spring-boot-starter</artifactId>
            <version>4.3.0</version>
        </dependency>
    </dependencies>
<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven-compiler-plugin}</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

memory-bacnkend-core-service 子服务:实现在线用户管理、接口发布与下线、接口调用管理。

 <parent>
        <groupId>com.memory.api</groupId>
        <artifactId>memory-api</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <name>memory-core</name>
    <description>memory-core</description>

    <groupId>com.memory</groupId>
    <artifactId>memory-backend-core-service</artifactId>
    <version>0.0.1-SNAPSHOT</version>
 <dependencies>
        <dependency>
            <groupId>com.memory.common</groupId>
            <artifactId>memory-backend-common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.memory.client</groupId>
            <artifactId>memory-backend-server-client</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.memory</groupId>
            <artifactId>memory-client-spring-boot-starter</artifactId>
            <version>0.0.1</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>3.1.8</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
            <version>2.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-spi</artifactId>
            <version>2.10.5</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-spring-web</artifactId>
            <version>2.10.5</version>
            <scope>compile</scope>
        </dependency>
        <!-- 添加 openfeign 框架依赖 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>
        <!-- https://doc.xiaominfo.com/knife4j/documentation/get_start.html-->
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-openapi2-spring-boot-starter</artifactId>
            <version>4.3.0</version>
        </dependency>
        <!-- OSS依赖-->
        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>3.10.2</version>
        </dependency>
        <dependency>
            <groupId>com.auth0</groupId>
            <artifactId>java-jwt</artifactId>
            <version>4.2.1</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven-compiler-plugin}</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

memory-backend-server-client 子服务:远程调用服务,实现内部服务间远程调用。

 <parent>
        <groupId>com.memory.api</groupId>
        <artifactId>memory-api</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <groupId>com.memory.client</groupId>
    <artifactId>memory-backend-server-client</artifactId>
    <version>0.0.1-SNAPSHOT</version>
<dependencies>
        <dependency>
            <groupId>com.memory.common</groupId>
            <artifactId>memory-backend-common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.2</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!-- 添加 openfeign 框架依赖 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
    </dependencies>
 <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven-compiler-plugin}</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>
高效 SDK 集成
Nacos 注册中心

← 高效 SDK 集成 Nacos 注册中心→

Theme by Vdoing | Copyright © 2023-2024 回忆如初
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式