Sentinel简介与基本使用

Sentinel是一个开源项目,提供流量控制、熔断降级和系统保护等功能,确保服务稳定性。它包括Java核心库和Dashboard控制台。文章详细介绍了如何搭建Dashboard,以及如何在SpringBoot项目中整合Sentinel,包括启用Feign支持和配置网关流控。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

Sentinel是阿里开源的项目,提供了流量控制、熔断降级、系统负载保护等多个维度来保障服务之间的稳定性。

官方文档:https://github.com/alibaba/spring-cloud-alibaba/wiki/Sentinel

  • Sentinel 分为两个部分:
    核心库(Java 客户端):不依赖任何框架/库,能够运行于所有 Java 运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。
  • 控制台(Dashboard):基于 Spring Boot 开发,打包后可以直接运行,不需要额外的 Tomcat 等应用容器。

环境搭建

一、dashboard 控制台安装与启动

  1. 下载地址:https://github.com/alibaba/Sentinel/releases
  2. 启动控制台
    java -jar sentinel-dashboard-1.8.6.jar --server.port=8333
    

    默认是8080端口,可能会被占用,这里我们指定了下8333端口。

  3. 配置控制台信息

    application.yml内容如下,这里spring.cloud.sentinel.transport.port是SpringBoot项目与控制台做交互的端口,默认8719。

    spring:
      cloud:
        sentinel:
          transport:
            port: 8719
            dashboard: localhost:8333
    
  4. 进入控制台

    访问刚刚配置好的地址:localhost:8333

    默认用户名:sentinel 密码: sentinel,登录,至此控制台环境搭建完成!

在这里插入图片描述

二、SpringBoot整合Sentinel

  1. 引入Sentinel依赖

    版本号最好与dashboard 版本对应,由于sentinel对spring could做了很好的适配,引入依赖后,项目里就可以正常监控了,是不是很简单。

    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    </dependency>
    
  2. 加入Feign支持

    Sentinel 适配了Feign组件。如果想要使用,还需要做 2 个事情:

    • 配置文件打开 Sentinel 对 Feign 的支持:feign.sentinel.enabled=true

    • 加入 spring-cloud-starter-openfeign 依赖使 Sentinel starter 中的自动化配置类生效

      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-openfeign</artifactId>
      </dependency>
      
      @FeignClient(name = "service-provider", fallback = EchoServiceFallback.class, configuration = FeignConfiguration.class)
      public interface EchoService {
          @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
          String echo(@PathVariable("str") String str);
      }
      
      class FeignConfiguration {
          @Bean
          public EchoServiceFallback echoServiceFallback() {
              return new EchoServiceFallback();
          }
      }
      
      class EchoServiceFallback implements EchoService {
          @Override
          public String echo(@PathVariable("str") String str) {
              return "echo fallback";
          }
      }
      

      这里降级方法与hystrix类似,EchoServiceFallback实现降级方法。

  3. 自定义流控响应

    项目里一般要配置,对流控拦截后的默认响应,这里我们成一个公共返回对象

    @Component
    public class GulimallSentinelConfig implements UrlBlockHandler{
        @Override
        public void blocked(HttpServletRequest request, HttpServletResponse response, BlockException ex) throws IOException {
            R r = R.error(BizCodeEnum.SECKILL_EXCEPTION.getCode(),BizCodeEnum.SECKILL_EXCEPTION.getMsg());
            response.setContentType("application/json;charset=utf-8");
            response.getWriter().write(JSON.toJSONString(r));
        }
    }
    
  4. 网关流控

    如果能在网关层就进行流控,可以避免请求流入业务,减小服务压力

    <!-- 引入sentinel网关限流 -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
        <version>2.1.0.RELEASE</version>
    </dependency>
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值