当前位置: 首页 > article >正文

spring网关维度

网关维度(针对某一个微服务):
代表网关访问该服务时的限流规则;
粒度粗--全局的配置;


Api 分组维度(针对一系列url地址,这些url地址可以不在同一个微服务内):
代表网关访问该接口时的限流规则;
粒度细--局部配置;

要实现上述内容,首先需要在pom.xml文件内添加依赖(以来配置内容可以在网上找类似教程比较多);

通过网关来实现两种维度的限流,先进入resorce文件夹中对yml文件进行补充;

加入对于sentinel的扩写,补上内容datasource;

sentinel:
    datasource:
        ds1.file:
            file:classpath:gw-flow.json #网关+API分组的限流
            ruleType: gw_flow
        ds2.file:
            file: classpath:api-group.json
            ruleType: gw api _group

 然后在gw-flow.json文件中写入限流规则,可以在yml文件中进行描写:

[
    {
        "resource":"资源的名称:网关时routes.id,api分组:api分组的名称"
        "resourceMode":"@网关,1api分组"
        "intervalsec":60,  //秒为单位
        "count":5    //限流次数
    },
    {
        "resource":"资源的名称:网关时routes.id,api分组:api分组的名称"
        "resourceMode":“@网关,1api分组”
        "intervalsec":60,
        'count": 5
    }
]

随后进行api分组内容,在同目录文档下写入api-group.json,当匹配到admin和login时,则自动启用该api分组栏目:

在测试效果前先进行接口的暴露,通过在GatewayServerApplication.java同目录下新建文件GatewayFlowRulesController.java,并在类上方标注注解@RestController,通过该java类完成网关维度限流策略以及api维度限流策略的获取;

@RestController注解是SpringMVC中的一个组合注解,用于标记一个类为控制器类。它实际上是@Controller和@ResponseBody注解的组合,表示该类中的所有方法都会返回JSON、XML等格式的数据,而不是视图页面。

list属于整个微服务架构,而login只属于api维度,当访问时,刚才存在网关维度的限流规则是60秒内5次,而api维度的限流规则是60秒内限制为1次;

 

场景题:现在list的限流规则为60秒内5次,而api维度的限流规则是60秒内限制为1次,list属于整个微服务架构,而login只属于api维度;请问当先访问list两次后再访问login一次还能请求到login吗,然后再访问list四次后再访问login一次,分别情况怎么样?

答:

  • 访问 list 两次

    • 由于 list 接口在API维度没有特别的限流规则,且它没有涉及API限流规则,默认假设没有限制。所以 list 的两次请求会被正常处理。
    • 网关维度的限流规则(60秒内5次)是跨所有接口的限制,因此网关维度限流规则目前使用了2次(两次 list 请求)。
  • 访问 login 一次

    • 根据API维度的限流规则,login 接口的访问是 60秒内1次,由于你当前60秒内还没有请求过 login,因此此时可以访问 login 接口。
    • 网关维度的限流规则是跨所有接口的,所以访问 login 后,网关的请求计数会增加到3次。
  • 访问 list 四次

    • 网关限流:网关维度已有3次请求(包括之前的2次 list 和1次 login),现在访问 list 四次,总共是 3 + 4 = 7次请求,已经超过了网关维度的5次限制。
    • 因此,网关限流会触发,所有在这4次 list 请求中的请求都会被拒绝,直到60秒过去。
  • 访问 login 一次

    • 网关限流:此时网关已经达到7次请求,超过了网关限流的5次限制,因此,无法请求到 login
    • API限流login 接口的API级别限流是60秒内1次,而在这个场景下,虽然API限流规则允许一次请求,但由于网关限流已经触发,所以 login 请求会被拦截。

http://www.kler.cn/a/463655.html

相关文章:

  • 玩转OCR | 腾讯云智能结构化OCR初次体验
  • vscode 多项目冲突:进行 vscode 工作区配置
  • 【Mars3D项目实战开发】vue3+vite搭建配置项3维地球
  • Redis四种模式在Spring Boot框架下的配置
  • xxxPipeline.from_pretrained(model_path)加载自定义路径下的模型结构
  • 异步背后的奥秘:事件循环
  • K8s中的监控
  • 【智能数据驱动未来】2025年计算机科学技术与机器学习、大数据国际会议 (CSTMLBD 2025)
  • 数组方法 | vue修改数组
  • Docker 安装与配置 Nginx
  • 如何将CSDN文章 导出为 PDF文件
  • Fedora安装docker
  • LeetCode 力扣 热题 100道(二十七)除自身以外数组的乘积(C++)
  • CMS漏洞靶场攻略
  • Kubernetes第二天
  • JavaScript的diff库详解(示例:vue项目实现两段字符串比对标黄功能)
  • 一文读懂:区块链的原理、技术、应用领域
  • 大型语言模型在金融市场中的预测能力
  • [AI] 深度学习的“黑箱”探索:从解释性到透明性
  • 管理员登录 Ubuntu 图形界面失败