面试 · 2024年6月7日 0

discovery-service:学习服务发现和依赖配置

1. discovery-service 的角色

在微服务架构中,服务发现(Service Discovery)是一个关键组件,它允许服务自动注册并能动态查找其他服务的位置。Eureka是Netflix开源的一个服务发现组件,在Spring Cloud中被广泛使用。

2. 配置解读

version: "3.7"
services:
  discovery-service:
    image: piomin/discovery-service:1.1-SNAPSHOT
    ports:
      - "8061:8061"
    depends_on:
      config-service:
        condition: service_healthy
    links:
      - config-service
    healthcheck:
      test: curl --fail http://localhost:8061/eureka/v2/apps || exit 1
      interval: 4s
      timeout: 2s
      retries: 3
    environment:
      SPRING_PROFILES_ACTIVE: docker

3. 服务发现

服务发现的作用是让服务可以动态地找到其他服务的实例,而不需要硬编码服务地址。

  • Eureka:Netflix的一个服务发现组件,提供服务注册和发现功能。服务在启动时会注册到Eureka Server上,Eureka Server会维护一个服务实例列表,供其他服务查找。

4. 依赖配置(depends_on 和 links)

依赖配置用于定义服务之间的启动顺序和网络连接。

  • depends_on: 定义服务的启动顺序和依赖关系。
  • links: 建立容器之间的网络连接,使得一个容器可以通过名称访问另一个容器。

5. 配置详解

  • image: piomin/discovery-service:1.1-SNAPSHOT: 使用指定的镜像来运行discovery-service。
  • ports: ["8061:8061"]: 将主机的8061端口映射到容器的8061端口。
  • depends_on: 定义服务的依赖关系。
    • config-service: 定义依赖的服务。
    • condition: service_healthy: 表示只有当config-service健康检查通过时,discovery-service才会启动。
  • links: 使discovery-service可以通过名称访问config-service。
    • config-service: 链接到config-service容器。
  • healthcheck: 配置健康检查。
    • test: curl --fail http://localhost:8061/eureka/v2/apps || exit 1: 检查Eureka Server的API接口是否可用。
    • interval: 4s: 每4秒进行一次健康检查。
    • timeout: 2s: 健康检查的超时时间为2秒。
    • retries: 3: 如果连续3次健康检查失败,则认为容器不健康。
  • environment: 配置环境变量。
    • SPRING_PROFILES_ACTIVE: docker: 设置Spring Boot的激活配置文件为docker。

6. 实践示例

Docker Compose 文件示例
version: "3.7"
services:
  config-service:
    image: piomin/config-service:1.1-SNAPSHOT
    ports:
      - "8088:8088"
    healthcheck:
      test: curl --fail http://localhost:8088/employee/docker || exit 1
      interval: 5s
      timeout: 2s
      retries: 3

  discovery-service:
    image: piomin/discovery-service:1.1-SNAPSHOT
    ports:
      - "8061:8061"
    depends_on:
      config-service:
        condition: service_healthy
    links:
      - config-service
    healthcheck:
      test: curl --fail http://localhost:8061/eureka/v2/apps || exit 1
      interval: 4s
      timeout: 2s
      retries: 3
    environment:
      SPRING_PROFILES_ACTIVE: docker
运行服务
  1. 启动config-service和discovery-service:bash复制代码docker-compose up -d config-service discovery-service
  2. 验证服务健康状况:
    • 检查config-service是否启动并健康。
    • 检查discovery-service是否能够成功启动并健康。
  3. 查看Eureka Server:
    • 打开浏览器,访问http://localhost:8061,你应该能够看到Eureka Server的控制台界面,其中列出了已注册的服务。

7. 结论

通过学习服务发现和依赖配置,你可以更好地管理和协调微服务的启动顺序和健康状况。服务发现组件如Eureka使得服务可以动态注册和发现,简化了服务间的通信和管理。依赖配置确保服务在正确的顺序中启动,并且可以自动处理服务的健康状况,从而提高系统的可靠性和可维护性。