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:
      shopify-product-api:
        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<AClient> {

    @Override
    public OracleClient create(Throwable cause) {
        return new OracleClient() {
            @Override
            public void syncStatus(RefundStatusDto refundStatusDto) {
                log.error("fallback error! param:{}",   JacksonUtil.parse2Str(refundStatusDto));
// 如果有返回值,直接返回一个null即可
            }
        };
    }
}
相关推荐
蜗牛互联网6 分钟前
Computer Use公共预览的安全设计:应用、动作与数据三维门禁
java·人工智能·后端·安全·策略模式
FYKJ_20109 分钟前
SSM校园互助与闲置交易平台62145-计算机课程设计、毕业设计
java·spring boot·python·mysql·架构·spark·课程设计
wangbing112511 分钟前
下划线数字字面量
java
吴声子夜歌13 分钟前
Nginx应用与运维——Nginx Web服务应用实战(HTTPS安全服务器的搭建)
运维·前端·nginx
liangshanbo121519 分钟前
Monorepo 工程化面试题:如何设计 Web + Node.js 中间层 + Shared + Scripts 的 Monorepo?
前端·node.js
IT_陈寒21 分钟前
Redis集群切换主节点时,服务竟然全员掉线
前端·人工智能·后端
星间都市山脉22 分钟前
RecoveryUI 圆角屏安全边距配置及代码调用链
android·java·linux·windows·ubuntu
sunshine22 girl24 分钟前
Java学习五 面向对象高级5 内部类4-匿名内部类(重点)
java·学习
wdfk_prog24 分钟前
Wi-Fi Direct 源码分析(09):从 P2P_CONNECT 到 GO Negotiation 完成
运维·服务器·ubuntu·golang·asp.net·p2p·wifi-direct
wangbing112527 分钟前
开发指南147-WebSocket-前端
前端·websocket·网络协议