用 Docker Compose 搭建 Spring Cloud 微服务架构

在现代软件开发中,微服务架构已成为一种流行的设计模式。本篇文章将介绍如何使用 Docker Compose 来搭建一个简单的 Spring Cloud 微服务架构。我们将通过代码示例和相关图示来深入理解这个过程。

前提条件

在开始之前,请确保你已经安装以下工具:

  1. Docker
  2. Docker Compose
  3. JDK(Java Development Kit)
  4. Maven(用于构建 Spring Boot 项目)

Spring Cloud 组件

在我们的示例中,我们将使用以下 Spring Cloud 组件:

  1. Eureka Server:服务注册与发现
  2. Gateway:网关服务
  3. Service AService B:两个微服务

项目结构

我们的项目将有以下结构:

microservices/
│
├── eureka-server/
│   └── Dockerfile
│   └── src/
│
├── gateway/
│   └── Dockerfile
│   └── src/
│
├── service-a/
│   └── Dockerfile
│   └── src/
│
└── service-b/
    └── Dockerfile
    └── src/
    
└── docker-compose.yml

示例代码:Dockerfile 文件

对于每个微服务,您都需要创建一个 Dockerfile。以下是 eureka-server 的示例 Dockerfile:

# eureka-server Dockerfile

FROM openjdk:11
VOLUME /tmp
COPY target/eureka-server.jar app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]

对于其他服务(Gateway、Service A、Service B),Dockerfile 的结构相似,只需替换 jar 文件名。

示例代码:docker-compose.yml 文件

以下是用于定义所有服务的 docker-compose.yml 文件:

version: '3'

services:
  eureka-server:
    image: eureka-server:latest
    build:
      context: ./eureka-server
    ports:
      - "8761:8761"

  gateway:
    image: gateway:latest
    build:
      context: ./gateway
    ports:
      - "8080:8080"
    depends_on:
      - eureka-server

  service-a:
    image: service-a:latest
    build:
      context: ./service-a
    depends_on:
      - eureka-server

  service-b:
    image: service-b:latest
    build:
      context: ./service-b
    depends_on:
      - eureka-server

服务间的交互

对于微服务来说,服务之间的交互至关重要。这里的序列图将展示客户端如何通过网关访问 Service A 和 Service B。

sequenceDiagram
    participant Client
    participant Gateway
    participant ServiceA
    participant ServiceB

    Client->>Gateway: 请求 Service A
    Gateway->>ServiceA: 转发请求
    ServiceA-->>Gateway: 返回数据
    Gateway-->>Client: 返回数据

    Client->>Gateway: 请求 Service B
    Gateway->>ServiceB: 转发请求
    ServiceB-->>Gateway: 返回数据
    Gateway-->>Client: 返回数据

Gantt 图:服务启动流程

下面的甘特图展示了服务启动的顺序:

gantt
    title 微服务启动流程
    dateFormat  YYYY-MM-DD
    section 启动服务
    Eureka Server   :a1, 2023-01-01, 1d
    Gateway         :after a1  , 1d
    Service A       :after a1  , 2d
    Service B       :after a1  , 2d

启动微服务

要开始运行这个微服务架构,只需在 microservices/ 目录下执行以下命令:

docker-compose up --build

这条命令将构建所有的 Docker 镜像,并启动所有服务。启动后,您可以通过访问 http://localhost:8761 来查看 Eureka Dashboard,您将看到所有注册的服务。

总结

通过使用 Docker Compose,我们成功构建了一个简单的 Spring Cloud 微服务架构。在这个过程中,我们不仅掌握了如何搭建服务注册与发现,还理解了如何通过网关与服务进行交互。微服务架构为开发人员提供了更大的灵活性和可扩展性,是构建现代应用的趋势。希望本篇文章能为你的微服务之旅提供帮助!