当前位置:主页 > java教程 > Spring Cloud Alibaba使用Sentinel实现接口限流

Spring Cloud Alibaba使用Sentinel实现接口限流的方法

发布:2020-02-09 14:50:26 277


给网友们整理Spring Cloud相关的编程文章,网友邰晨风根据主题投稿了本篇教程内容,涉及到Spring、Cloud、Alibaba、Sentinel、接口限流、Spring Cloud Alibaba使用Sentinel实现接口限流相关内容,已被693网友关注,涉猎到的知识点内容可以在下方电子书获得。

Spring Cloud Alibaba使用Sentinel实现接口限流

最近管点闲事浪费了不少时间,感谢网友 libinwalan 的留言提醒。及时纠正路线,继续跟大家一起学习Spring Cloud Alibaba。

Nacos作为注册中心和配置中心的基础教程,到这里先告一段落,后续与其他结合的内容等讲到的时候再一起拿出来说,不然内容会有点跳跃。接下来我们就来一起学习一下Spring Cloud Alibaba下的另外一个重要组件:Sentinel。

Sentinel是什么

Sentinel的官方标题是:分布式系统的流量防卫兵。从名字上来看,很容易就能猜到它是用来作服务稳定性保障的。对于服务稳定性保障组件,如果熟悉Spring Cloud的用户,第一反应应该就是Hystrix。但是比较可惜的是Netflix已经宣布对Hystrix停止更新。那么,在未来我们还有什么更好的选择呢?除了Spring Cloud官方推荐的resilience4j之外,目前Spring Cloud Alibaba下整合的Sentinel也是用户可以重点考察和选型的目标。

Sentinel的功能和细节比较多,一篇内容很难介绍完整。所以下面我会分多篇来一一介绍Sentinel的重要功能。本文就先从限流入手,说说如何把Sentinel整合到Spring Cloud应用中,以及如何使用Sentinel Dashboard来配置限流规则。通过这个简单的例子,先将这一套基础配置搭建起来。

使用Sentinel实现接口限流

Sentinel的使用分为两部分:

  • sentinel-dashboard:与hystrix-dashboard类似,但是它更为强大一些。除了与hystrix-dashboard一样提供实时监控之外,还提供了流控规则、熔断规则的在线维护等功能。
  • 客户端整合:每个微服务客户端都需要整合sentinel的客户端封装与配置,才能将监控信息上报给dashboard展示以及实时的更改限流或熔断规则等。

下面我们就分两部分来看看,如何使用Sentienl来实现接口限流。

部署Sentinel Dashboard

本文采用的spring cloud alibaba版本是0.2.1,可以查看依赖发现当前版本使用的是sentinel 1.4.0。为了顺利完成本文的内容,建议挑选同版本的sentinel dashboard来使用是最稳妥的。

下载地址: sentinel-dashboard-1.4.0.jar

其他版本: Sentinel/releases

同以往的Spring Cloud教程一样,这里也不推荐大家跨版本使用,不然可能会出现各种各样的问题。

通过命令启动:

java -jar sentinel-dashboard-1.4.0.jar

sentinel-dashboard不像Nacos的服务端那样提供了外置的配置文件,比较容易修改参数。不过不要紧,由于sentinel-dashboard是一个标准的spring boot应用,所以如果要自定义端口号等内容的话,可以通过在启动命令中增加参数来调整,比如: -Dserver.port=8888

默认情况下,sentinel-dashboard以8080端口启动,所以可以通过访问: localhost:8080 来验证是否已经启动成功,如果一切顺利的话,可以看到如下页面:

Spring Cloud Alibaba使用Sentinel实现接口限流

整合Sentinel

第一步:在Spring Cloud应用的 pom.xml 中引入Spring Cloud Alibaba的Sentinel模块:

 <dependencies>
 <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
 </dependency>
 <dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
 </dependency>

 <dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
  <version>1.18.2</version>
  <optional>true</optional>
 </dependency>
 <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-test</artifactId>
  <scope>test</scope>
 </dependency>
</dependencies>

第二步:在Spring Cloud应用中通过 spring.cloud.sentinel.transport.dashboard 参数配置sentinel dashboard的访问地址,比如:

spring.application.name=alibaba-sentinel-rate-limiting
server.port=8001

# sentinel dashboard
spring.cloud.sentinel.transport.dashboard=localhost:8080

第三步:创建应用主类,并提供一个rest接口,比如:

@SpringBootApplication
public class TestApplication {

 public static void main(String[] args) {
  SpringApplication.run(TestApplication.class, args);
 }

 @Slf4j
 @RestController
 static class TestController {

  @GetMapping("/hello")
  public String hello() {
   return "didispace.com";
  }
 }
}

第四步:启动应用,然后通过postman或者curl访问几下 localhost:8001/hello 接口。

$ curl localhost:8001/hello
didispace.com

此时,在上一节启动的Sentinel Dashboard中就可以当前我们启动的 alibaba-sentinel-rate-limiting 这个服务以及接口调用的实时监控了。具体如下图所示:

Spring Cloud Alibaba使用Sentinel实现接口限流

配置限流规则

在完成了上面的两节之后,我们在 alibaba-sentinel-rate-limiting 服务下,点击 簇点链路 菜单,可以看到如下界面:

Spring Cloud Alibaba使用Sentinel实现接口限流

其中 /hello 接口,就是我们上一节中实现并调用过的接口。通过点击 流控 按钮,来为该接口设置限流规则,比如:

Spring Cloud Alibaba使用Sentinel实现接口限流

这里做一个最简单的配置:

  • 阈值类型选择:QPS
  • 单机阈值:2

综合起来的配置效果就是,该接口的限流策略是每秒最多允许2个请求进入。

点击 新增 按钮之后,可以看到如下界面:

Spring Cloud Alibaba使用Sentinel实现接口限流

其实就是左侧菜单中 流控规则 的界面,这里可以看到当前设置的所有限流策略。

验证限流规则

在完成了上面所有内容之后,我们可以尝试一下快速的调用这个接口,看看是否会触发限流控制,比如:

$ curl localhost:8001/hello
didispace.com
$ curl localhost:8001/hello
didispace.com
$ curl localhost:8001/hello
Blocked by Sentinel (flow limiting)

可以看到,快速的调用两次 /hello 接口之后,第三次调用被限流了。

代码示例

本文介绍内容的客户端代码,示例读者可以通过查看下面仓库中的 alibaba-sentinel-rate-limiting 项目:

Github:https://github.com/dyc87112/SpringCloud-Learning/

Gitee: https://gitee.com/didispace/SpringCloud-Learning/

参考资料

下面是Sentinel的仓库地址与官方文档,读者也可以自己查阅文档学习:

Github
Sentinel官方文档
Spring Cloud Alibaba Sentinel文档

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持码农之家。


参考资料

相关文章

  • SpringBoot实现自定义启动器的示例详解

    发布:2023-03-08

    虽然Spring官方给我们提供了很多的启动器供我们使用,但有时候我们也会遇到某些特殊场景,这些启动器满足不了。这个时候就需要自定义一个启动器供我们使用,本文为大家介绍了SpringBoot实现自定义启动器的方法,希望对大家有所帮助


  • SpringBoot项目启动报错踩坑实战记录

    发布:2023-04-10

    这篇文章主要给大家介绍了关于SpringBoot项目启动报错踩坑的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下


  • 微服务Spring Boot 整合 Redis 实现UV 数据统计的详细过程

    发布:2023-03-13

    这篇文章主要介绍了微服务Spring Boot 整合 Redis 实现 UV 数据统计,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下


  • SpringBoot项目将mybatis升级为mybatis-plus的方法

    发布:2023-03-03

    本文主要介绍了SpringBoot项目将mybatis升级为mybatis-plus的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧


  • Spring中IOC和AOP的深入讲解

    Spring中IOC和AOP的深入讲解

    发布:2022-06-18

    给大家整理一篇关于Spring的教程,这篇文章主要给大家介绍了关于Spring中IOC和AOP的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧


  • Spring使用AOP完成统一结果封装实例demo

    发布:2023-04-14

    这篇文章主要介绍了Spring使用AOP完成统一结果封装,本文通过实现demo给大家详细讲解,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下


  • SpringBoot+layui实现文件上传功能的实例讲解

    发布:2019-10-29

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。这篇文章主要介绍了SpringBoot+layui实现文件上传,需要的朋友可以参考下


  • 微服务链路追踪Spring Cloud Sleuth整合Zipkin解析

    发布:2023-04-05

    这篇文章主要为大家介绍了微服务链路追踪Spring Cloud Sleuth整合Zipkin解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪


网友讨论