栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

zuul + ratelimit网关做限流(附录核心代码)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

zuul + ratelimit网关做限流(附录核心代码)

1、导入依赖
zuul.pom

         
            org.springframework.cloud
            spring-cloud-starter-netflix-zuul
        

        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        

        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-config
        
        
        
        
            com.marcosbarbero.cloud
            spring-cloud-zuul-ratelimit
            2.0.6.RELEASE
        
        
        
            org.hibernate
            hibernate-validator
            5.2.4.Final
        

如果不加hibernate的依赖,会报错

nested exception is javax.validation.NoProviderFoundException: Unable to create a Configuration, because no Jakarta Bean Validation provider could be found. Add a provider like Hibernate Validator (RI) to your classpath.

2、zuul.yml

zuul:
  routes:
    user: # user是网关里的路由名,自己起的
      path: /user/**
      serviceId: userService  #重定向的路由
    product:
      path: /product/**
      serviceId: productService
  # 配置限流
  ratelimit:
    enabled: true  #是否开启限流
    behind-proxy: true  #代理之后
    default-policy: #可选 - 针对所有的路由配置的策略,除非特别配置了policies
      limit: 3 #可选 - 每个刷新时间窗口对应的请求数量限制
      quota: 3 #可选-  每个刷新时间窗口对应的请求时间限制(秒)
      refresh-interval: 60 # 刷新时间窗口的时间,默认值 (秒)
      type: #可选 限流方式
        - url
    policies:  # user是网关里的路由名,自己起的
      user:
        limit: 2
        quota: 2
        efresh-interval: 60

3、分别启动zuul和user服务,然后连续调user服务下的接口,第三次的时候会出现这个页面

4、上面的提示不太友好,怎们可以改写一下,网关里写一个控制器
ErrorController.java

@RestController
public class ErrorHander implements ErrorController {
    @Override
    public String getErrorPath() {
        return "error";
    }

     //自定义的异常信息方法
    @RequestMapping(value = "error")
    public Map error() {
        Map map = new HashMap<>();
        map.put("msg", "计数器访问限流");              //提示信息
        map.put("code", 401);                        // 错误码
        return map;
    }
}

再次连续访问user服务里的接口,就会变成这样,自定义的返回结果样式可以自己修改

这里指定user服务下的限流策略是通过url的方式,就是在刷新时间内,调用user服务下接口的总次数,即使是多节点的,也是一样,我自己已经测过。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/988697.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号