zoukankan      html  css  js  c++  java
  • SpringCloudAlibaba

    前言

    记录下Feign整合Sentinel的方式
    Feign的整合与Sentinel的整合查看系列文章


    环境

    Spring Cloud Hoxton.SR9 + Spring Cloud Alibaba 2.2.6.RELEASE + Sentinel 1.8.1


    简单示例

    • 实现内容中心使用feign调用用户中心接口限流

    content-center

    • application.yml
    feign:
      sentinel:
        # 为 Feign 整合 Sentinel
        enabled: true
    
    • TestController.java
    @RestController
    @RequiredArgsConstructor(onConstructor = @__(@Autowired))
    public class TestController {
    
    	 private final TestFeignClient testFeignClient;
    
        @GetMapping("test6")
        public String test6() {
            return testFeignClient.test("Coisini");
        }
        
    }
    
    • TestFeignClient.java
    @FeignClient(name = "user-center")
    public interface TestFeignClient {
    
        /**
         * test接口被调用时,feign会构造出 url
         * http://user-center/test/{name} 完成请求
         * @param name
         * @return
         */
        @GetMapping("/test/{name}")
        String test(@PathVariable String name);
    
    }
    

    user-center

    TestController.java

    @RestController
    @Slf4j
    public class TestController {
    
        @GetMapping("/test/{name}")
        public String test(@PathVariable String name) {
            log.info("请求...");
            return "hello " + name;
        }
    
    }
    

    测试

    • 调用接口

    在这里插入图片描述


    • 通过簇点链路配置一条QPS1的流控规则

    在这里插入图片描述

    • 频繁访问接口触发流控

    在这里插入图片描述



    定制自己的逻辑处理

    • 可以通过@FeignClientfallback属性定制自己的逻辑处理,也就是远程调用被流控了时的业务处理逻辑

    • TestFeignClient.java

    @FeignClient(name = "user-center", fallback = TestFeignClientFallback.class)
    
    • TestFeignClientFallback.java
    /**
     * TestFeignClient 被流控时的处理逻辑
     */
    @Component
    public class TestFeignClientFallback implements TestFeignClient {
        @Override
        public String test(String name) {
            // 业务逻辑
            return "流控/降级";
        }
    }
    
    • 重新启动应用配置流控规则频繁访问接口触发流控

    在这里插入图片描述



    限流/降级的异常捕捉

    • 可以通过@FeignClientfallbackFactory属性捕捉异常
    • TestFeignClient.java
    @FeignClient(name = "user-center", fallbackFactory = TestFeignClientFallbackFactory.class)
    
    • TestFeignClientFallbackFactory.java
    @Component
    @Slf4j
    public class TestFeignClientFallbackFactory implements FallbackFactory<TestFeignClient> {
        @Override
        public TestFeignClient create(Throwable cause) {
            return new TestFeignClient() {
                @Override
                public String test(String name) {
                    log.warn("远程调用被限流/降级了", cause);
                    return "远程调用被限流/降级了";
                }
            };
        }
    }
    
    • 重新启动应用配置流控规则频繁访问接口触发流控

    在这里插入图片描述


    • 后台异常的打印

    在这里插入图片描述

    注:fallback 与 fallbackFactory 二选一使用


    项目源码


    - End -
    白嫖有风险
    点赞加收藏
    以上为本篇文章的主要内容,希望大家多提意见,如果喜欢记得点个推荐哦
    作者:Maggieq8324
    本文版权归作者和博客园共有,欢迎转载,转载时保留原作者和文章地址即可。
  • 相关阅读:
    JDK7集合框架源码阅读(四) LinkedHashMap
    JDK7集合框架源码阅读(三) HashMap
    JDK7集合框架源码阅读(二) LinkedList
    在django中解决跨域AJAX
    Python基础之文件操作
    Python基础之深浅copy
    Python基础之集合set
    Python基础之range()
    Python基础之enumerate枚举
    Python基础之for循环
  • 原文地址:https://www.cnblogs.com/maggieq8324/p/15339759.html
Copyright © 2011-2022 走看看