限流通常能够根据客户端IP,请求的URL,用户登录信息进行限制,每秒钟限制屡次数,这从别一方面也提高了系统的性能,无用的并发没那么多了。redis
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zuul</artifactId> </dependency> <dependency> <groupId>com.marcosbarbero.cloud</groupId> <artifactId>spring-cloud-zuul-ratelimit</artifactId> <version>1.3.2.RELEASE</version> </dependency>
zuul: routes: #实现了反向代码和负载均衡,负载均衡采用轮询的方式实现 a: path: /a/** sensitiveHeaders: "*" #不过滤任何头信息 serviceId: servicea b: path: /b/** sensitiveHeaders: "*" serviceId: serviceb c: path: /c/** sensitiveHeaders: "*" serviceId: servicec add-proxy-headers: false stripPrefix: true #为true的状况下:向后端转发以后是不会携带 '/a' 的。为 false 则相反
ratelimit: enabled: true repository: REDIS #使用redis存储,必定要大写! policies: a: #针对上面那个服务的限流 limit: 100 #每秒多少个请求 refreshInterval: 60 #刷新时间窗口的时间,默认值 (秒) type: - ORIGIN #这里必定要大写,类型说明:URL经过请求路径区分,ORIGIN经过客户端IP地址区分,USER是经过登陆用户名进行区分,也包括匿名用户
这样,服务a的限流就作好了!spring