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
上述配置中,我们定义了两个服务 nacos
和 sentinel
。nacos
使用了官方提供的 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: 返回结果