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

SpringCloudAlibaba→Sentinel:集成Gateway

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

SpringCloudAlibaba→Sentinel:集成Gateway

Sentinel集成Gateway
  • 1、Sentinel对网关支持
  • 2、集成Sentinel
  • 3、配置/API定义
    • 1)API定义
    • 2)规则创建
    • 3)配置/Api加载

1、Sentinel对网关支持

Sentinel 支持对 Spring Cloud Gateway、Zuul 等主流的 API Gateway 进行限流。

Sentinel 1.6.0 引入了Sentinel API Gateway Adapter Common 模块,此模块中包含网关限流的规则和自定义 API 的实体和管理逻辑:

  • GatewayFlowRule :网关限流规则,针对 API Gateway 的场景定制的限流规则,可以针对不同route 或自定义的 API 分组进行限流,支持针对请求中的参数、Header、来源 IP 等进行定制化的限流。
  • ApiDefinition :用户自定义的 API 定义分组,可以看做是一些 URL 匹配的组合。比如我们可以定义一个 API 叫 my_api ,请求 path 模式为/foo @Bean @Order(Ordered.HIGHEST_PRECEDENCE) public SentinelGatewayBlockExceptionHandler sentinelGatewayBlockExceptionHandler() { return new SentinelGatewayBlockExceptionHandler(viewResolvers, serverCodecConfigurer); } @Bean @Order(-1) public GlobalFilter sentinelGatewayFilter() { return new SentinelGatewayFilter(); } }

    此时集成就完成了。

    3、配置/API定义 1)API定义

    正如前面所说, ApiDefinition 用户自定义的 API 定义分组,可以看做是一些 URL 匹配的组合。比如我们可以定义一个 API 叫my_api,请求 path 模式为 /foo private void initCustomizedApis() { //Api集合 Set definitions = new HashSet(); ApiDefinition cartApi = new ApiDefinition("hailtaxi_driver_api") .setPredicateItems(new HashSet() {{ add(new ApiPathPredicateItem().setPattern("/driver private void initGatewayRules() { //网关限流规则 Set rules = new HashSet(); //商品微服务规则配置 //资源名称,可以是网关中的 route 名称或者用户自定义的 API 分组名称 rules.add(new GatewayFlowRule("hailtaxi-order") //限流阈值 .setCount(2) //应对突发请求时额外允许的请求数目。 .setBurst(2) //统计时间窗口,单位是秒,默认是 1 秒。 .setIntervalSec(1) //限流行为 //CONTROL_BEHAVIOR_RATE_LIMITER 匀速排队 //CONTROL_BEHAVIOR_DEFAULT 快速失败(默认) .setControlBehavior(RuleConstant.CONTROL_BEHAVIOR_RATE_LIMITER) //匀速排队模式下的最长排队时间,单位是毫秒,仅在匀速排队模式下生效。 .setMaxQueueingTimeoutMs(1000) ); //单独对API 【mall_cart_api】限流配置 rules.add(new GatewayFlowRule("hailtaxi_driver_api") //限流阈值 .setCount(3) //统计时间窗口,单位是秒,默认是 1 秒。 .setIntervalSec(1) ); //加载网关规则 GatewayRuleManager.loadRules(rules); }

    上述代码中的

     rules.add(new GatewayFlowRule("hailtaxi-order")
    

    就是指定了要拦截gateway中的哪些route来进行限流、熔断。比如上面那行代码。其实就对应了gateway配置文件中的

    3)配置/Api加载

    上面两个步骤创建了API并且创建了配置,但并没有在程序启动加载,我们可以采用 @PostConstruct注解实现加载调用,在com.itheima.config.GatewayConfiguration中创建方法:

        
        @PostConstruct
        public void doInit() {
            initCustomizedApis();
            initGatewayRules();
        }
    
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/677512.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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