0、前言

  sentinel的限流、降级功能强大,可以在控制面板中任意制定规则,然后推送到微服务中;

  可以根据URL单独制定规则,也可以根据资源名批量制定规则;

  需要注意的地方是:1、GITHUB文件在国外的亚马逊服务器已经彻底被墙,无法下载,只能想法找国内的分享,自求多福

           2、控制面板制定的规则只保存在内存中,重启就会消失,需要配合其他方式实现持久化存储规则,这点在生产环境中需要注意

1、运行sentinel

  sentinel只是一个JAR包,下载下来后,直接命令运行该JAR就行,默认的端口是8080,可以自己制定其他端口运行,如下指定8849端口运行:

java  -Dserver.port=8849  -jar   sentinel-dashboard-1.6.3.jar

2、项目集成

  这里需要先搞清楚:

    限流:就是请求多了,对请求进行定制的快速响应处理,应用在服务提供者本身

    降级:就是熔断了,再简单点说就相当于服务断开了、服务不可用了,服务崩溃了,

         所以降级逻辑应该应用在消费者(调用者)那里,加在服务提供者本身是毫无意义的,因为服务已经断开了

  一般我们在项目中:

    1、限流和熔断都可以直接在网关统一处理,不需要在微服务本身做限流处理,

    2、但在微服务调用其他微服务时,还是需要增加熔断处理的,这其实是两个层级API调用的熔断;

    3、所以,一般情况下,网关spring cloud gateway 中做限流和一级熔断,在微服务内部调用时hystrix做二级熔断;

    4、不是项目比较庞大,需要控制比较细致的话,sentinel其实比较鸡肋,用处不大,用hystrix更方便更实用,如果是大型电商,要对每个API都就精确细致控制,那可以考虑sentinel,否则,个人还是不建议使用的,使用以上组合更贴合实际;

2-1、限流

2-1-1、添加依赖

        <!-- 集成sentinel -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<version>2.0.1.RELEASE</version>
</dependency>

2-1-2、添加配置

  这里需要注意:项目集成sentinel,会占用一个端口开启http服务,用来发送心跳检测以检测健康状态,

  sentinel控制台默认占用的是8719;集成的项目中,会在8719端口以后自动需找一个可用的端口,比如8720,8720不可用就会找8721,以此顺序往下找;

  有些人直接在配置文件中指定该HTTP服务端口:如sentinel.port=8720;这种方式很不推荐,因为我们的系统包含很多服务,没个服务又会启动很多实例,如果要指定的话那那么多个实例都要一一配置,还要避免端口冲突,工作量大很繁琐,且容易混乱;

  所以,不要认为指定该端口,让系统自动去找可用端口即可,并且我们在端口分配时,可以避开8700-8800这两个段的端口,应对大型集群,留给它预留好了,端口多的是

server:
port: 8761
spring:
application:
name: nacos-user
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 sentinel:
transport:
dashboard: localhost:8849
eager: true

2-1-3、controller中增加限流

   在方法上增加@SentinelResource注解,
  value是资源名称,对应sentinel中指定的一个规则,多个方法可以使用同一个名称,也就是批量应用规则
  blockHandler是限流后执行的方法名;
   @RequestMapping("/hello")
@SentinelResource(value = "userblock1",blockHandler = "BlockHello") //sentinel限流
public String Hello()
{
return ("hello world" +serviceUtil.getPort());
} //-----------限流、降级的handler-----------------
public String BlockHello(BlockException exception) //1、限流
{
return ("少年,限流了 --Port:" +serviceUtil.getPort());
}
//---------------------------------------------

2-1-4、运行测试

  1、运行程序,执行一次user/hello方法

   2、在sentinel控制面板中,增加userblock1的限流规则,再次运行/user/hello,就可以看到效果:

2-2、熔断降级(feign的方式)

2-2-1、添加依赖

        <!-- 集成sentinel -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<version>2.0.1.RELEASE</version>
</dependency> <!-- 集成feign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2-2-2、增加配置

server:
port: 8765
spring:
application:
name: nacos-order
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
sentinel:
transport:
dashboard: localhost:8849
eager: true
feign:
sentinel:
enabled: true #打开sentinel对feign的支持

2-2-3、实现

增加feign接口

@FeignClient(name = "nacos-user",fallback = UserFallbackService.class)
public interface UserClient
{
@RequestMapping("/user/hello")
String hello();
}

增加实现类

@Component
public class UserFallbackService implements UserClient
{
@Override
public String hello()
{
String rt="";
rt="少年,服务被降级停用了,等等再来吧!!";
return rt;
}
}

controller注入使用

    @Autowired
private UserClient userClient; @RequestMapping("/order2")
public String order2()
{
return userClient.hello();
}

2-2-4、运行测试

启动order,不启动user,运行order/order2,可以看到运行结果

sentinel就是这么简单灵活, 持久化和集群处理后续再来探讨

spring cloud微服务快速教程之(九) Spring Cloud Alibaba--sentinel-限流、熔断降级的更多相关文章

  1. spring cloud微服务快速教程之(七) Spring Cloud Alibaba--nacos(一)、服务注册发现

    0.前言 什么是Spring Cloud Alibaba? Spring Cloud Alibaba 是阿里开源的,致力于提供微服务开发的一站式解决方案.此项目包含开发分布式应用微服务的必需组件,方便 ...

  2. 0.9.0.RELEASE版本的spring cloud alibaba sentinel限流、降级处理实例

    先看服务提供方的,我们在原来的sentinel实例(参见0.9.0.RELEASE版本的spring cloud alibaba sentinel实例)上加上限流.降级处理,三板斧只需在最后那一斧co ...

  3. spring cloud微服务快速教程之(四)熔断器(Hystrix)及其工具(Dashboard、Turbine)

    0-为什么需要熔断器 在分布式系统中,各个服务相互调用相互依赖,如果某个服务挂了,很可能导致其他调用它的一连串服务也挂掉或者在不断等待中耗尽服务器资源,这种现象称之为雪崩效应: 未来防止系统雪崩,熔断 ...

  4. spring cloud微服务快速教程之(十一) Sleuth(zipkin) 服务链路追踪

    0.前言 微服务架构上众多微服务通过REST调用,可能需要很多个服务协同才能完成一个接口功能,如果链路上任何一个服务出现问题或者网络超时,都会形成导致接口调用失败.随着业务的不断扩张,服务之间互相调用 ...

  5. spring cloud微服务快速教程之(五) ZUUL API网关中心

    0-前言 我们一个个微服务构建好了,外部的应用如何来访问内部各种各样的微服务呢?在微服务架构中,后端服务往往不直接开放给调用端,而是通过一个API网关根据请求的url,路由到相应的服务.当添加API网 ...

  6. spring cloud微服务快速教程之(十) gateway 服务网关

    0.前言 gateway是spring的二代网关, 作为Netflix Zuul的替代者,是异步非阻塞网关 ,ZUUL2也是异步非阻塞的,但未纳入spring cloud整合计划 基于WebFlux  ...

  7. spring cloud微服务快速教程之(八) Spring Cloud Alibaba--nacos(二)、配置中心

    0-前言 上一篇我们介绍了nacos作为服务注册发现组件的功能,nacos还具有配置中心的功能,而且支持热加载: 在此之前,配置中心有Spring Cloud Config,实际上,用这个有很多风险和 ...

  8. spring cloud微服务快速教程之(三)声明式访问Feign、负载均衡Ribbon

    0-前言 eureka实际上已经集成了负载均衡调度框架Ribbon: 我们有了各个微服务了,那怎么来调用他们呢,一种方法是可以使用 RestTemplate(如:String str= restTem ...

  9. spring cloud微服务快速教程之(六) 应用监控 spring boot admin

    0-前言 当我们发布了微服务后,我们希望对各个应用的各个运行状况进行一个监控:这个时候spring boot admin,就出场了: spring boot admin:是一个监控和管理spring ...

随机推荐

  1. Java 设计模式之抽象工厂模式

    抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在抽 ...

  2. Flutter 入门 --- 内部分享

    八月部门给分配的分享任务,由于项目太赶,推迟一个月. 选 Flutter 这个主题,是因为现在它慢慢流行起来了,而我却不了解,故而借此契机,上手试试. 简介 Flutter 是 Google 推出的跨 ...

  3. SVN本地服务器搭建及在Eclipse中的应用

    0.说明在程序开发的时候会有很多的版本,通过手动备份的方式不紧麻烦而且低效易出错.使用SVN来管理版本会方便很多,虽然有一些学习成本,但是学会使用之后会使得开发更加的高效.本文介绍如何在本地搭建svn ...

  4. JSP&Servlet学习笔记----第6章

    JSP与Servlet是一体两面的关系. JSP最终还是被编译为Servlet. <%@page contentType="text/html;charset=UTF-8" ...

  5. 深入理解JVM-类加载及类加载器

    深入理解JVM 2020年02月06日22:43:09 - 记录学习过程 终于开始了.在学习这个之前,看了zhanglong老师的 java 8 和springboot 迫不及待了.先开始吧. 写在前 ...

  6. python 异常之进阶操作

    1.文件分析 下面来做一些文件分析操作,分析整本书的信息. 知识点: string.split():将字符串分解为列表. open(filename,‘rb’)或者open(filename,enco ...

  7. [xml]AttributeError: 'xml.etree.ElementTree.Element' object has no attribute 'getroot'

    >>> import requests >>> res = requests.get("https://xxx.com/sitemap.xml" ...

  8. Codeforces_712_B

    http://codeforces.com/problemset/problem/712/B 水,判断奇偶即可. #include<iostream> #include<string ...

  9. avtivity与view

    view和activity的区别 activity相当于控制部分,view相当于显示部分.两者之间是多对多的关系,所有东西必须用view来显示.  viewGroup继承自view,实现了ViewMa ...

  10. EOJ Monthly 2019.2 E 中位数 (二分+中位数+dag上dp)

    题意: 一张由 n 个点,m 条边构成的有向无环图.每个点有点权 Ai.QQ 小方想知道所有起点为 1 ,终点为 n 的路径中最大的中位数是多少. 一条路径的中位数指的是:一条路径有 n 个点,将这  ...