4.Zuul-限流
令牌桶 限流流程图:

RateLimitFilter :
package com.wangfajun.filter; import com.alibaba.fastjson.JSON;
import com.google.common.util.concurrent.RateLimiter;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import com.wangfajun.utils.Result;
import org.springframework.stereotype.Component;
import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.PRE_TYPE;
import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.SERVLET_DETECTION_FILTER_ORDER; /**
* 限流
*/
@Component
public class RateLimitFilter extends ZuulFilter { //1个令牌
private static final RateLimiter rateLimit = RateLimiter.create(1); @Override
public String filterType() {
return PRE_TYPE;
} @Override
public int filterOrder() {
return SERVLET_DETECTION_FILTER_ORDER-1;
} @Override
public boolean shouldFilter() {
return true;
} @Override
public Object run() throws ZuulException {
RequestContext requestContext = RequestContext.getCurrentContext();
if(!rateLimit.tryAcquire()){
requestContext.setSendZuulResponse(false);//不通过
requestContext.getResponse().setContentType("text/html;charset=UTF-8");
requestContext.setResponseBody(JSON.toJSONString(Result.REQUEST_LIMIT));
}
return null;
}
}
Result:
package com.wangfajun.utils; import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString; /**
* 返回信息封装类
*/
@Data
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class Result {
private int code;
private String msg; public static Result REQUEST_LIMIT = new Result(-10001, "请求超限");
public static Result SERVER_ERROR = new Result(-10002, "服务端异常");
public static Result PARAM_ERROR = new Result(-10003, "token缺失"); }
ReturnInfo:
package com.wangfajun.utils; import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString; /**
* 返回信息
*/
@Data
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class ReturnInfo<T> { private int returnCode;
private String returnMsg;
private T content; public ReturnInfo(T content){
this.content = content;
} public ReturnInfo(Result codeMsg){
if(codeMsg!=null){
this.returnCode = codeMsg.getCode();
this.returnMsg = codeMsg.getMsg();
}
} //成功
public static <T> ReturnInfo<T> success(T content){
return new ReturnInfo<T>(content);
} //成功
public static <T> ReturnInfo<T> success(Result codeMsg){
return new ReturnInfo<T>(codeMsg);
} //失败
public static <T> ReturnInfo<T> error(Result codeMsg){
return new ReturnInfo<T>(codeMsg);
} }
pom:
<dependencies>
<!--eureka-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!--zuul-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--fastjson-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.38</version>
</dependency>
</dependencies>
一秒内不停提交请求:响应信息:{"code":-10001,"msg":"请求超限"}
4.Zuul-限流的更多相关文章
- Spring Cloud Zuul 限流详解(附源码)(转)
在高并发的应用中,限流往往是一个绕不开的话题.本文详细探讨在Spring Cloud中如何实现限流. 在 Zuul 上实现限流是个不错的选择,只需要编写一个过滤器就可以了,关键在于如何实现限流的算法. ...
- Spring Cloud(十二):Spring Cloud Zuul 限流详解(附源码)(转)
前面已经介绍了很多zuul的功能,本篇继续介绍它的另一大功能.在高并发的应用中,限流往往是一个绕不开的话题.本文详细探讨在Spring Cloud中如何实现限流. 在 Zuul 上实现限流是个不错的选 ...
- Zuul 限流
/** * 限流 */ @Component public class RateLimiterFilter extends ZuulFilter { //1秒钟100个令牌 private stati ...
- SpringCloud zuul 网关限流分析
最近项目中 spring cloud zuul 运用到限流功能,打算配置一下就直接使用,不过在压测与调优过程中遇到一些没有预测到的问题,附上排查与解析结果 yml.pom配置 强烈推荐,按最新gith ...
- SpringCloud(8)---zuul权限校验、接口限流
zuul权限校验.接口限流 一.权限校验搭建 正常项目开发时,权限校验可以考虑JWT和springSecurity结合进行权限校验,这个后期会总结,这里做个基于ZuulFilter过滤器进行一个简单的 ...
- Zuul上实现限流(spring-cloud-zuul-ratelimit)
简述 Spring Cloud Zuul RateLimit项目Github地址: https://github.com/marcosbarbero/spring-cloud-zuul-ratelim ...
- spring cloud网关通过Zuul RateLimit 限流配置
目录 引入依赖 配置信息 RateLimit源码简单分析 RateLimit详细的配置信息解读 在平常项目中为了防止一些没有token访问的API被大量无限的调用,需要对一些服务进行API限流.就好比 ...
- Zuul:构建高可用网关之多维度限流
对请求的目标URL进行限流(例如:某个URL每分钟只允许调用多少次) 对客户端的访问IP进行限流(例如:某个IP每分钟只允许请求多少次) 对某些特定用户或者用户组进行限流(例如:非VIP用户限制每分钟 ...
- Spring Cloud(7):Zuul自定义过滤器和接口限流
上文讲到了Zuul的基本使用: https://www.cnblogs.com/xuyiqing/p/10884860.html 自定义Zuul过滤器: package org.dreamtech.a ...
- Spring Cloud alibaba网关 sentinel zuul 四 限流熔断
spring cloud alibaba 集成了 他内部开源的 Sentinel 熔断限流框架 Sentinel 介绍 官方网址 随着微服务的流行,服务和服务之间的稳定性变得越来越重要.Sentine ...
随机推荐
- P1008 三连击
题目背景 本题为提交答案题,您可以写程序或手算在本机上算出答案后,直接提交答案文本,也可提交答案生成程序. 题目描述 将1,2,⋯,9共9个数分成3组,分别组成3个三位数,且使这33个三位数构成1:2 ...
- NTT算法小结
从理论上说,经过人们优化的FFT已经十分优秀,能够处理大部分的多项式乘法,但是有的时候仍然会出现下面的情况: 1)常数仍然比较大 2)在进行与整数有关的FFT时,发现得到的结果是一堆诡异的数,你需要不 ...
- 【XSY2679】修墙 最短路
题目描述 有一个\((n+1)\times (m+1)\)的网格,每条边都有一个边权.有一些格子是城市.你要用一个环圈住所有城市,要求环上所有边的边权和最小.重合的边边权算多次.保证左上角\((1,1 ...
- 爬虫_拉勾网(selenium)
使用selenium进行翻页获取职位链接,再对链接进行解析 会爬取到部分空列表,感觉是网速太慢了,加了time.sleep()还是会有空列表 from selenium import webdrive ...
- VSIX 插件右键菜单(2)
编译项目然后发布 // 获取当前右击的活动项目 EnvDTE.Project activeProj = ProjectHelpers.GetActiveProject(); // 获取 编译选项 Re ...
- Anaconda换源小记
如果还没有安装可以参考:https://www.cnblogs.com/dotnetcrazy/p/9158715.html 一键更新所有库:conda update --all 清华的源有时候有点小 ...
- javascript Object的新方法
今天复习es6,又看到Object的一堆方法,与es5的表现又有不一致,耗费了一整天,整理一下: 前几天在司徒正美的书里又看到了es5 Object的字眼,为了向下兼容,大神们也是牛逼的整理出一系列i ...
- A1147. Heaps
In computer science, a heap is a specialized tree-based data structure that satisfies the heap prope ...
- A1115. Counting Nodes in a BST
A Binary Search Tree (BST) is recursively defined as a binary tree which has the following propertie ...
- 真机控件获取 app-inspector
1.安装app-inspector:npm install app-inspector -g 若是要卸载原有的:npm uninstall app-inspector -g np ...