• FeignClient注解中各种属性详解二


    一、OpenFeign调用远程接口模版

    @FeignClient(name = "aClient",
            url = "${system.config.A.url}",
            configuration = AConfig.class,
            fallbackFactory = AFallbackFactory.class)
    @Validated
    public interface aClient {
    
        @PostMapping("services/rest/connect")
        void syncStatus(@RequestBody @Valid @NotNull RefundStatusDto refundStatusDto);
    }

    一、name = "aClient"

    这里的name是随便定义的,主要就是占据这个属性,由于使用了url所以name是不会生效,当然我们还可以配置feign调用的时间,如:在nacos上配置feign的连接超时时间等属性。如果是想通过集群调用远程接口,就不用配置url,而是进行name的配置,值为微服务的名称,如果配置url会优先使用url进行http形式进行调用。

    feign:
      client:
        config:
          aClient:
            connect-timeout: 10000
            read-timeout: 20000

    二、  url = "${system.config.a.url}"

    这个是配置在了nacos上的一个路径,如果需要实时获取,也就是热更新,可以在@FeignClient加上@RefreshScope,注意这个没有测试过是否可以,使用时需要自测一下。

    三、configuration = AConfig.class

    这个是对请求进行一个自定义配置,配置自己需要的信息

    class  AConfig implements RequestInterceptor {
        private final B b;
    
        private final static String TOKEN_KEY = "X";
    
    
        @Override
        public void apply(RequestTemplate template) {
            // 获取数据库配置信息
            C c  = b.getConfig(xxx);
            if (c== null) {
                throw new BizException("error xxx");
            }
            // 覆盖了@FeignClient注解中的url属性
            template.target(c.getUrl());
            if (ObjectUtil.isNotEmpty(c.getToken())) {
                template.header(TOKEN_KEY, c.getToken());
            } else {
                template.header(HttpHeaders.AUTHORIZATION, "Basic " + c.getAuthorization());
            }
            
        }
    }

    四、fallbackFactory = AFallbackFactory.class 

    这个是进行熔断兜底的。

    @Slf4j
    @Component
    public class AFallbackFactory implements FallbackFactory {
    
        @Override
        public aClient create(Throwable cause) {
            return new aClient () {
                @Override
                public void syncStatus(RefundStatusDto refundStatusDto) {
                    log.error("fallback error! param:{}",   JacksonUtil.parse2Str(refundStatusDto));
    // 如果有返回值,直接返回一个null即可
                }
            };
        }
    }
    
  • 相关阅读:
    第十七章 条件随机场
    内存快照:宕机后,Redis如何实现快速恢复?
    Redis学习3——列表数据类型的操作
    【数据结构】二叉树详解(上篇)
    MyBatis-Plus代码自动生成
    Fastdfs之集群安装
    git安装后报git: ‘remote-https‘ is not a git command. See ‘git --help‘.
    MongoDB进阶指南!
    图机器学习在蚂蚁集团推荐业务中的应用
    【RocketMQ系列四】消息示例-简单消息的实现
  • 原文地址:https://blog.csdn.net/weixin_42972832/article/details/133431352