Sentinel限流熔断

Sentinel限流熔断

Sentinel 概述

Sentinel (分布式系统的流量防卫兵) 是阿里开源的一套用于服务容错的综合性解决方案。它以流量为切入点, 从流量控制、熔断降级、系统负载保护等多个维度来保护服务的稳定性。
Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景, 例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。

Sentinel核心分为两个部分:
核心库(Java 客户端):能够运行于所有 Java 运行时环境,同时对Dubbo /Spring Cloud 等框架也有较好的支持。
控制台(Dashboard):基于 Spring Boot 开发,打包后可以直接运行。

Sentinel安装

1.打开sentinel下载网址

 https://github.com/alibaba/Sentinel/releases

2.下载jar包
在这里插入图片描述
3.在sentinel对应目录下,cmd回车进入
在这里插入图片描述
4.输入命令

java -Dserver.port=8180 -Dcsp.sentinel.dashboard.server=localhost:8180 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.0.jar

执行之后等待
在这里插入图片描述

访问Sentinel

1.Sentinel默认端口8180,访问localhost:8180即可访问登录界面
在这里插入图片描述
2.登录sentinel,用户名和密码都是sentinel
在这里插入图片描述

快速入门

通过网关作为服务访问的入口,对系统中的服务进行访问,例如访问sca-provider资源

第一步:创建gateway模块,添加pom依赖

		<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <--还可以添加nacos实现负载均衡-->
 <dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

第二步:创建application.yml 添加相关配置,配置如下

spring:
  application:
    name: sca-gateway
  cloud:
    nacos:
        discovery:
          server-addr: localhost:8848
    gateway:
        discovery:
          locator:
            enabled: true  #开启通过服务注册中心的serviceId创建路由
        routes:
            - id: route01  #路由id,自己指定一个唯一值即可
#              uri: http://localhost:8080/ #网关帮我们转发的url
              uri: lb://sca-provider #lb这里表示负载均衡,sca-provider为注册中心的服务名
              predicates: ###断言(谓词):匹配请求规则
                - Path=/nacos/provider/echo/**  #请求路径定义,此路径对应uri中的资源**/
              filters: ##网关过滤器,用于对谓词中的内容进行判断分析以及处理
                - StripPrefix=1 #转发之前去掉path中第一层路径,例如nacos

第三步:创建启动类
在这里插入图片描述
第四步:访问资源url,localhost:9000/nacos/provider/echo/9000,需要先启动sca-provider,sca-gateway服务

在这里插入图片描述

predicates说明

Predicate(断言)又称谓词,用于条件判断,只有断言结果都为真,才会真正的执行路由。断言其本质就是定义路由转发的条件.

predicates 内置工厂

1.基于dataTime类型的断言工厂

此类型的断言根据时间做判断,主要有三个:

1) AfterRoutePredicateFactory:判断请求日期是否晚于指定日期
2) BeforeRoutePredicateFactory:判断请求日期是否早于指定日期
3) BetweenRoutePredicateFactory:判断请求日期是否在指定时间段内

-After=2020-12-31T23:59:59.789+08:00[Asia/Shanghai]

当且仅当请求时的时间After配置的时间时,才转发该请求,若请求时的时间不是After配置的时间时,则会返回404 not found。时间值可通过ZonedDateTime.now()获取。

2.基于header的断言工厂HeaderRoutePredicateFactory

判断请求Header是否具有给定名称且值与正则表达式匹配。例如:

-Header=X-Request-Id, \d+

3.基于Method请求方法的断言工厂

MethodRoutePredicateFactory接收一个参数,判断请求类型是否跟指定的类型匹配。例如:

-Method=GET

4.基于Query请求参数的断言工厂,QueryRoutePredicateFactory

接收两个参数,请求param和正则表达式, 判断请求参数是否具 有给定名称且值与正则表达式匹配。例如:

-Query=pageSize,\d+

网关限流

网关是所有请求的公共入口,所以可以在网关进行限流,而且限流的方式也很多,我们采用Sentinel组件来实现网关的限流。

限流快速入门

第一步:添加依赖,在原有spring-cloud-starter-gateway依赖的基础上再添加如下两个依赖

	<dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
        </dependency>

第二步:添加sentinel及路由规则(假如已有则无需设置)

sentinel:
        transport:
          dashboard: localhost:8180
          port: 8719
        eager: true
routes: #配置网关路由规则
          - id: route01  #路由id,自己指定一个唯一值即可
            #uri: http://localhost:8081/ #网关帮我们转发的url
            uri: lb://sca-provider #lp这里表示负载均衡,sca-provider为注册中心的服务名
            predicates: ###断言(谓此):匹配请求规则
              - Path=/nacos/provider/echo/**  #请求路径定义
            filters: ##网关过滤器,用于对谓词中的内容进行判断分析以及处理
              - StripPrefix=1 #转发之前去掉path中第一层路径,例如nacos
            

第三步:启动网关项目,检测sentinel控制台的网关菜单。
启动时,添加sentinel的jvm参数,通过此菜单可以让网关服务在sentinel控制台显示不一样的菜单,代码如下

-Dcsp.sentinel.app.type=1

如图中位置
在这里插入图片描述
访问sentinel控制台 效果如图,则表示配置成功
在这里插入图片描述

配置网关流量规则
在这里插入图片描述

在这里插入图片描述
打开浏览器访问url 多次点击如图所示,表示配置成功
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闪耀太阳a

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值