如何在SpringBoot服务上实现接口限流

  介绍

如何在SpringBoot服务上实现接口限流?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

在日常开发中,限流功能时常被使用,用于对某些接口进行限流熔断,譬如限制单位时间内接口访问次数,或者按照某种规则进行限流,如限制ip的单位时间访问次数等。

之前我们已经讲过接口限流的工具类ratelimter可以实现令牌桶的限流,很明显前哨的功能更为全面和完善。

<强>哨兵介绍

随着微服务的流行,服务和服务之间的稳定性变得越来越重要.Sentinel以流量为切入点,从流量控制,熔断降级,系统负载保护等多个维度保护服务的稳定性。

哨兵具有以下特征:

    <李>丰富的应用场景:哨兵承接了阿里巴巴近10年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围),消息削峰填谷,实时熔断下游不可用应用等。 <李>完备的实时监控:哨兵同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至500台以下规模的集群的汇总运行情况。 <李>广泛的开源生态:哨兵提供开箱即用的与其它开源框架/库的整合模块,例如与春天的云,达博,gRPC的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入哨兵。 <李>完善的SPI扩展点:哨兵提供简单易,用完善的SPI扩展点。您可以通过实现扩展点,快速的定制逻辑,例如定制规则管理,适配数据源等。

来简单使用一下前哨。

哨兵包括服务端和客户端,服务端有可视化界面,客户端需引入罐后即可和服务端通信并完成限流功能。

https://github.com/alibaba/Sentinel/releases在这个地址,下载释放的jar,然后启动即可。

这个jar是个标准的SpringBoot应用,可以通过

java jar sentinel-dashboard-1.6.0。jar来启动,这样就是默认的设置,启动在8080端口。也可以加上一些自定义配置来启动

 java -Dserver。=8080 -Dcsp.sentinel.dashboard港。服务器=localhost: 8080 -Dproject.name=sentinel-dashboard jar sentinel-dashboard。jar。

具体配置的解释,可以到GitHub上看一下文档。

这里我们直接使用默认java jar sentinel-dashboard-1.6.0。jar来启动,之后访问localhost: 8080。可以看到界面:

如何在SpringBoot服务上实现接口限流

输入账号密码哨兵后进入主界面

如何在SpringBoot服务上实现接口限流

此时因为我们并没有启动客户端,所以界面是空的。

新建一个SpringBoot项目,pom如下:<代码>

& lt;及# 63;xml version=?.0”;编码=癠TF-8", # 63;比;   http://maven.apache.org/POM/4.0.0" & lt;项目xmlns=?xmlns: xsi=癶ttp://www.w3.org/2001/XMLSchema-instance"   ,xsi: schemaLocation=癶ttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"的在;   & lt; modelVersion> 4.0.0   & lt; parent>   & lt; groupId> org.springframework.boot   & lt; artifactId> spring-boot-starter-parent   & lt; version> 2.0.5.RELEASE   & lt; relativePath/比;& lt; !——从库中查找父——比;   & lt;/parent>      & lt; groupId> com.maimeng.baobanq   & lt; artifactId> baobanserver   & lt; version> 0.0.1-SNAPSHOT   & lt; packaging> jar   & lt; name> baobanserver   春天Boot< & lt; description>演示项目;/description>      & lt; properties>   & lt; project.build.sourceEncoding> UTF-8   & lt; project.reporting.outputEncoding> UTF-8   & lt; java.version> 1.8 & lt;/java.version>   & lt; spring-cloud.version> Finchley.SR1   & lt;/properties>      & lt; dependencies>      & lt; dependency>   & lt; groupId> org.springframework.boot   & lt; artifactId> spring-boot-starter-web   & lt;/dependency>      & lt; !——哨兵——比;   & lt; dependency>   & lt; groupId> org.springframework.cloud   & lt; artifactId> spring-cloud-starter-alibaba-sentinel   & lt;/dependency>   & lt; !——哨兵结束——比;      & lt; dependency>   & lt; groupId> org.springframework.boot

如何在SpringBoot服务上实现接口限流