一 docker 安装部署

1 拉取镜像

docker pull bladex/sentinel-dashboard:1.8.8

2 运行容器

2.1 运行命令

docker run --name bladex_sentinel_dashboard_1.8.8  --restart=always \
  -d \
  -p 8858:8858 \
  -p 8719:8719 \
  -e username=sentinel \
  -e password=sentinel \
   bladex/sentinel-dashboard:1.8.8 

2.2 命令解释


docker run --name bladex_sentinel_dashboard_1.8.8 --restart=always \
  • docker run:用于启动一个新容器。
  • --name bladex_sentinel_dashboard_1.8.8:指定容器名称,方便后续使用(如停止、重启、查看日志等)。
  • --restart=always:设置容器在异常退出或主机重启后自动重启。适合部署环境使用,保障服务稳定运行。

  -d \
  • -d:Detached mode,表示容器以“后台运行”模式启动,启动后不占用当前终端。

  -p 8858:8858 \
  • -p 8858:8858:端口映射

    • 左侧 8858:宿主机端口(对外暴露)
    • 右侧 8858:容器内部 Sentinel 控制台监听端口
    • ❗️bladex/sentinel-dashboard 镜像已将默认端口修改为 8858(不是传统 Sentinel 控制台的 8080)

  -p 8719:8719 \
  • -p 8719:8719:映射 Sentinel 控制台与客户端之间的通信端口。

    • 控制台通过此端口接收客户端的心跳和监控数据。
    • Spring Boot 客户端中对应配置:spring.cloud.sentinel.transport.port=8719

  -e username=sentinel \
  -e password=sentinel \
  • -e:设置环境变量

    • username=sentinel:登录控制台使用的用户名
    • password=sentinel:登录控制台使用的密码
  • ⚠️ 这些参数是 bladex 定制镜像特有的,原版 Sentinel 官方镜像并不支持这种方式设置登录认证。


  bladex/sentinel-dashboard:1.8.8
  • 指定要运行的 Docker 镜像及版本。

  • bladex/sentinel-dashboard:1.8.8 是一个社区版本,基于 Sentinel 控制台构建,做了定制:

    • 默认端口改为 8858
    • 支持用户名/密码登录认证(通过 -e 环境变量设置)
    • 默认带中文界面优化等

总结

该命令会启动一个名为 bladex_sentinel_dashboard_1.8.8 的 Sentinel 控制台容器,具有以下特点:

  • 对外提供 8858 端口访问控制台 UI;
  • 对客户端开放 8719 用于通信;
  • 登录控制台的账号密码为:sentinel / sentinel;
  • 异常退出或主机重启后自动恢复运行。

3 控制台访问

http://IP:8858

在这里插入图片描述

4 springboot(3.2.4) 整合

4.1 引入依赖

<dependency>
   <groupId>com.alibaba.cloud</groupId>
   <artifactId>spring-cloud-alibaba-dependencies</artifactId>
   <version>2023.0.1.0</version>
   <type>pom</type>
   <scope>import</scope>
</dependency>

  <!-- Sentinel 核心依赖 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

 <!-- management 相关配置依赖 -->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

4.2 yml 配置

spring:
  application:
    name: your-service-name  

    cloud:
	  sentinel:
	     transport:
	        # Sentinel 控制台的地址(host:port),这里对应你 Docker 宿主机地址和映射端口
	        dashboard: 113.45.38.93:8858  
	        # 当前服务暴露给 Sentinel 控制台的通信端口(默认 8719,不能被占用)
	        # 控制台通过这个端口接收客户端心跳、指标数据等
	        port: 8719                 
	       # 是否在应用启动时立即连接 Sentinel 控制台(默认是懒加载,建议设为 true 提前建立连接)                 
	     eager: true               

management:
  endpoints:
    web:
      exposure:
        # 暴露所有 Actuator 端点(如 /actuator/health、/actuator/sentinel 等)
        # Sentinel 控制台依赖 /actuator/sentinel 接口获取客户端信息
        # 生产环境建议精确暴露,示例:include: [health, info, sentinel]
        include: '*'                                           

二 jar 方式

1 jar 下载

sentinel jar 下载地址

2 运行 jar

java -jar sentinel-dashboard-1.8.8.jar --server.port=8858

3 访问控制台

http://localhost:8858

4 springboot(3.2.4) 整合

4.1 引入依赖

<dependency>
   <groupId>com.alibaba.cloud</groupId>
   <artifactId>spring-cloud-alibaba-dependencies</artifactId>
   <version>2023.0.1.0</version>
   <type>pom</type>
   <scope>import</scope>
</dependency>

  <!-- Sentinel 核心依赖 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
  <!-- Sentinel nacos 集成 -->
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
 <!-- management 相关配置依赖 -->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

4.2 yml 配置

4.2.1 主配置文件
spring:
  cloud:
    sentinel:
      transport:
        # Sentinel 控制台的地址(host:port),这里对应你 Docker 宿主机地址和映射端口
        dashboard: localhost:8858
        # 当前服务暴露给 Sentinel 控制台的通信端口(默认 8719,不能被占用)
        # 控制台通过这个端口接收客户端心跳、指标数据等
        port: 8719
        client-ip: 192.168.20.3
      datasource:
        rate-limiting:
          nacos: # 告诉sentinel用nacos作为数据源
            data-id: market-rate-limiting-dev.json
            group-id: market
            server-addr: 113.45.38.93:8848
            username: nacos
            password: nacos
            rule-type: flow
            data-type: json
            namespace: 1ee09d3b-83fb-4292-a2eb-9b40ce871300
        circuit-breaker:
          nacos: # 告诉sentinel用nacos作为数据源
            data-id: market-circuit-breaker-dev.json
            group-id: market
            server-addr: 113.45.38.93:8848
            username: nacos
            password: nacos
            rule-type: degrade
            data-type: json
            namespace: 1ee09d3b-83fb-4292-a2eb-9b40ce871300

        # 是否在应用启动时立即连接 Sentinel 控制台(默认是懒加载,建议设为 true 提前建立连接)
      eager: true

management:
  endpoints:
    web:
      exposure:
        # 暴露所有 Actuator 端点(如 /actuator/health、/actuator/sentinel 等)
        # Sentinel 控制台依赖 /actuator/sentinel 接口获取客户端信息
        # 生产环境建议精确暴露,示例:include: [health, info, sentinel]
        include: '*'
4.2.2 market-rate-limiting-dev.json
[
	{
		"resource": "activity_draw",
		"limitApp": "default",
		"grade": 1,
		"count": 1,
		"strategy": 0,
		"controlBehavior": 0,
		"clusterMode": false
	}
]

配置相关介绍参考官方文档—使用文档-基本使用(资源与规则)

4.2.3 market-circuit-breaker-dev.json
[
	{
		"resource": "activity_draw",
		"limitApp": "default",
		"grade": 2,
		"count": 1,
		"timeWindow": 10,
		"minRequestAmount": 3,
		"statIntervalMs": 10000
	}
]

配置相关介绍参考官方文档—使用文档-熔断降级。

5 代码示例

 @RequestMapping(value = "test", method = RequestMethod.POST)
    @SentinelResource(value = "activity_draw",
            blockHandlerClass = {CustomBlockAndFallbackHandler.class},
            blockHandler = "drawRateLimiterError",
            fallbackClass = {CustomBlockAndFallbackHandler.class},
            fallback = "drawHystrixError")
    public Response<ActivityDrawResponseDTO> test(@RequestBody ActivityDrawRequestDTO request) {

        if(request.getUserId().equals("hy")) {
            throw new RuntimeException("熔断测试");
        }

        System.out.println("=============================================");
        System.out.println(request);
        System.out.println("=============================================");

        return Response.<ActivityDrawResponseDTO>builder()
                .code(ResponseCode.SUCCESS.getCode())
                .info(ResponseCode.SUCCESS.getInfo())
                .build();
    }

package com.market.trigger.handler;

import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.market.api.dto.ActivityDrawRequestDTO;
import com.market.api.dto.ActivityDrawResponseDTO;
import com.market.api.response.Response;
import com.market.types.enums.ResponseCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

@Slf4j
@Component
public class CustomBlockAndFallbackHandler {

    public static Response<ActivityDrawResponseDTO> drawRateLimiterError(ActivityDrawRequestDTO request, BlockException ex) {
        log.warn("限流 - userId:{} activityId:{}", request.getUserId(), request.getActivityId());

        return Response.<ActivityDrawResponseDTO>builder()
                .code(ResponseCode.RATE_LIMITER.getCode())
                .info(ResponseCode.RATE_LIMITER.getInfo())
                .build();
    }


    public static Response<ActivityDrawResponseDTO> drawHystrixError(ActivityDrawRequestDTO request, Throwable ex) {
        log.error("熔断触发 - userId:{} activityId:{} 异常:{}", request.getUserId(), request.getActivityId(), ex.getMessage());

        System.out.println("=============================================================");
        System.out.println(ex.getMessage());
        System.out.println("=============================================================");

        return Response.<ActivityDrawResponseDTO>builder()
                .code(ResponseCode.HYSTRIX.getCode())
                .info(ResponseCode.HYSTRIX.getInfo())
                .build();
    }


}

代码相关疑问,参考官方文档—使用文档-注解支持

6 sentinel 官方文档

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐