清淨
  • Java

    • Java 基础
  • 框架

    • Flyway
    • MapStruct
    • Spring Cloud
  • 中间件

    • Elasticsearch
    • Redis
    • RabbitMQ
    • Kafka
  • 三剑客

    • HTML
    • CSS
    • JavaScript
  • 进阶

    • jQuery
    • ECMAScript6
    • TypeScript
  • Vue

    • Vue2
    • Vue3
    • VuePress
  • Linux
  • Jenkins
  • Maven
  • MySQL
  • 插件工具
  • 代码集成
  • 其它

    • 数据结构与算法
    • 计算机网络
    • 操作系统
    • 设计模式
迁移日志
订阅号
微信订阅号
微信订阅号
GitHub
  • Java

    • Java 基础
  • 框架

    • Flyway
    • MapStruct
    • Spring Cloud
  • 中间件

    • Elasticsearch
    • Redis
    • RabbitMQ
    • Kafka
  • 三剑客

    • HTML
    • CSS
    • JavaScript
  • 进阶

    • jQuery
    • ECMAScript6
    • TypeScript
  • Vue

    • Vue2
    • Vue3
    • VuePress
  • Linux
  • Jenkins
  • Maven
  • MySQL
  • 插件工具
  • 代码集成
  • 其它

    • 数据结构与算法
    • 计算机网络
    • 操作系统
    • 设计模式
迁移日志
订阅号
微信订阅号
微信订阅号
GitHub
  • Spring Cloud

    • 简介
    • 服务拆分

      • 拆分原则
      • 父模块
      • 公共模块
      • 商品服务
      • 购物车服务
    • 远程调用
    • 注册中心

拆分原则

服务拆分要尽可能做到高内聚、低耦合,拆分的方式可分为:

  • 垂直(纵向)拆分:按照业务模块进行拆分
  • 水平(横向)拆分:抽取共服务,提高复用性,例如风控、短信等服务

目前流行的微服务工程结构有两种:

  • 每个微服务都是一个独立的 Maven 工程,他们可以被放在同一个目录中,也可以放在不同的目录中。每个微服务都有自己独立的 Git 仓库,并且独立打包和部署。每个独立的 Maven 工程也都可以有自己的父工程,也可以采用 Maven 聚合的方式进行管理。适用于大型项目,服务数量较多的情况。
  • 所有微服务都放在一个父工程中,通过 Maven 的多模块聚合进行管理,每个微服务都是父工程的一个子模块。每个微服务都可以有自己独立的 Git 仓库,也可以和工程放在同一个 Git 仓库中。适用于中小型项目,服务数量较少的情况。

为了加深对微服务的理解,我们先从单体项目开始,把这个项目拆分成微服务。在拆分的过程中,我们会遇到各种问题,为了解决这些问题,我们会引入微服务相关的组件。单体项目的结构如下:

20250625225419

Maven 项目结构如下:

  • hmall
<groupId>com.heima</groupId>
<artifactId>hmall</artifactId>
<packaging>pom</packaging>
<version>1.0.0</version>
<modules>
    <module>hm-common</module>
    <module>hm-service</module>
</modules>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.12</version>
    <relativePath/>
</parent>
  • hm-common
<!-- hm-common 中主要是一些工具类以及公共组件,例如数据库、MyBatis 的配置等等 -->
<parent>
    <artifactId>hmall</artifactId>
    <groupId>com.heima</groupId>
    <version>1.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>hm-common</artifactId>
  • hm-service
<parent>
    <artifactId>hmall</artifactId>
    <groupId>com.heima</groupId>
    <version>1.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>hm-service</artifactId>

<dependencies>
    <!--hm-common-->
    <dependency>
        <groupId>com.heima</groupId>
        <artifactId>hm-common</artifactId>
        <version>1.0.0</version>
    </dependency>
</dependencies>    

hm-service 主要包含了用户、商品、购物车、订单等模块,我们要做的就是把 hm-service 进行拆分。此处使用垂直拆分,并使用 Maven 聚合的方式管理微服务,拆分后的项目结构如下:

hmall
├── hm-common
├── hm-goods-service
├── hm-cart-service
想要编辑此页?
上次更新: 2025/7/10 23:23
贡献者: Junfeng Dai
父模块→
[ 纸上得来终觉浅绝知此事要躬行 ]
Copyright © 2021-present Junfeng Dai
蜀ICP备2021009537号