Docker-Compose 部署 Nacos 和 Sentinel

简介

Docker-Compose 是一种用于定义和运行多个容器的工具,而 Nacos 和 Sentinel 是两个非常常用的微服务相关的开源项目。Nacos 用于服务的注册和配置,Sentinel 用于流量控制和熔断降级。本文将介绍如何使用 Docker-Compose 来快速部署 Nacos 和 Sentinel,并提供相应的代码示例。

1. 安装 Docker 和 Docker-Compose

在开始之前,确保你的系统已经安装了 Docker 和 Docker-Compose。如果没有安装,你可以参考 Docker 的官方文档进行安装。

2. 创建 Docker-Compose 文件

首先,创建一个名为 docker-compose.yml 的文件,用于定义我们要部署的容器和相关配置。

version: '3'
services:
  nacos:
    image: nacos/nacos-server:1.4.0
    ports:
      - 8848:8848
    volumes:
      - ./data:/home/nacos/data
      - ./logs:/home/nacos/logs
      - ./init.d:/home/nacos/init.d
    command: "sh /home/nacos/bin/startup.sh -m standalone"
    environment:
      - PREFER_HOST_MODE=hostname
    restart: always
  sentinel:
    image: bladex/sentinel-dashboard
    ports:
      - 8080:8080
    environment:
      - SERVER_PORT=8080
      - SPRING_APPLICATION_NAME=sentinel-dashboard
    restart: always

上述配置中,我们定义了两个服务 nacossentinelnacos 使用了官方提供的 Docker 镜像 nacos/nacos-server:1.4.0,并映射了三个目录:data 用于存储数据,logs 用于存储日志,init.d 用于存储初始化脚本。nacos 服务将在宿主机的 8848 端口上监听请求。sentinel 使用了 bladex/sentinel-dashboard 镜像,并在宿主机的 8080 端口上监听请求。

3. 启动 Nacos 和 Sentinel

在当前目录下打开终端(命令行),执行以下命令来启动 Nacos 和 Sentinel:

docker-compose up -d

4. 访问 Nacos 和 Sentinel

现在,你可以通过浏览器访问 Nacos 和 Sentinel。

  • Nacos 控制台:http://localhost:8848/nacos
  • Sentinel 控制台:http://localhost:8080

代码说明

下面是一些常用的代码示例,用于与 Nacos 和 Sentinel 进行交互。

使用 Nacos 注册服务

import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.cloud.client.serviceregistry.Registration;

// 注入 DiscoveryClient 和 Registration
@Autowired
private DiscoveryClient discoveryClient;
@Autowired
private Registration registration;

// 注册服务
discoveryClient.registerInstance(registration.getServiceId(), registration.getInstanceId());

使用 Sentinel 进行熔断降级

import com.alibaba.csp.sentinel.annotation.SentinelResource;

// 定义资源名称和降级处理方法
@SentinelResource(value = "hello", fallback = "fallbackMethod")
public String hello() {
    // 业务逻辑
}

// 降级处理方法
public String fallbackMethod() {
    // 降级逻辑
}

类图

下面是一个简单的类图,用于说明 Nacos 和 Sentinel 的关键类和接口。

classDiagram
    class Nacos {
        + start()
        + stop()
        + registerInstance()
        + deregisterInstance()
        + getConfig()
        + setConfig()
    }

    class Sentinel {
        + start()
        + stop()
        + getResource()
        + setResource()
        + getRule()
        + setRule()
    }

    Nacos --> Sentinel

序列图

下面是一个示例序列图,展示了一个服务注册到 Nacos 并使用 Sentinel 进行流量控制和熔断降级的过程。

sequenceDiagram
    participant Client
    participant Nacos
    participant Sentinel
    participant Service

    Client ->> Nacos: 注册服务
    Client ->> Sentinel: 请求服务(正常)
    Sentinel ->> Service: 执行服务逻辑
    Service ->> Sentinel: 返回结果