首页 > 其他分享 >OpenFeign 使用细节

OpenFeign 使用细节

时间:2024-08-15 17:29:01浏览次数:9  
标签:OpenFeign api default dg 细节 base 使用 com class

@EnableFeignClients 注解配置项

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Documented
@Import({FeignClientsRegistrar.class})
public @interface EnableFeignClients {
    // 和 basePackages 互为别名
    String[] value() default {};

    // 指定基础包(扫描这个包及子包下标注了 FeignClient 注解的接口,将会为其生成代理类注入到 spring 容器)
    String[] basePackages() default {};

    // 指定一个或多个类(接口),这些类所在的包作为基础包(相当于不直接指定 basePackages,推断出 basePackages)
    Class<?>[] basePackageClasses() default {};

    // 指定 Feign 的全局配置类,如果不指定就是默认的,可以设置请求拦截、超时时间等
    Class<?>[] defaultConfiguration() default {};

    // 扫描指定的类,这些类如果标注了 FeignClient 注解,将会为其生成代理类注入到 spring 容器
    Class<?>[] clients() default {};
}
  1. basePackages 示例

    @Configuration
    @EnableFeignClients(basePackages = {
            "com.dtyunxi.yundt.cube.center.scheduler.api",
            "com.yunxi.dg.base.center.expense.api",
            "com.yunxi.dg.base.commons.rpc.*",
            "com.yunxi.dg.base.center.report.api",
            "com.yunxi.dg.base.center.rule.api",
            "com.yunxi.dg.base.center.shop.api",
            "com.yunxi.dg.base.center.rebate.api",
            "com.yunxi.dg.base.center.customer.api"
    })
    public class FeignClientConfig {
    }
    
  2. basePackageClasses 示例

    // basePackages 将会是 com.yunxi.dg.base.center.expense.api.biz
    @EnableFeignClients(basePackageClasses = {com.yunxi.dg.base.center.expense.api.biz.IAccountAugmentOrderApi.class})
    
  3. defaultConfiguration 示例

    // 指定一个配置类
    @Configuration
    @EnableFeignClients(basePackageClasses = {com.yunxi.dg.base.center.expense.api.biz.IAccountAugmentOrderApi.class},
                       defaultConfiguration = MyFeignConfiguration.class)
    public class FeignClientConfig {
    }
    
    // 配置类代码
    @Configuration
    public class MyFeignConfiguration {
    
        @Bean
        public Logger.Level feignLoggerLevel() {
            return Logger.Level.FULL; // 设置 Feign 的日志级别为 FULL
        }
    
        @Bean
        public Request.Options requestOptions() {
            return new Request.Options(5000, 10000); // 设置 Feign 的连接超时和读取超时
        }
    
        // 其他定制化配置,比如请求拦截器、错误解码器等
    }
    
  4. clients 示例

    @EnableFeignClients(clients = {MyFeignClient1.class, MyFeignClient2.class})
    

@FeignClient 注解配置项

public @interface FeignClient {
    
    // 和 value 互为别名,标示要调用哪个服务,要和 nacos 上面的服务名一致
    @AliasFor("name")
    String value() default "";

    // 当服务提供者的接口太多了,调用方想分为多个 FeignClient,就要指定不同的 contextId,一般不配置
    String contextId() default "";

    @AliasFor("value")
    String name() default "";

    String[] qualifiers() default {};

    // 表示要调用的地址,优先级高于 name,一般用于调试,写死一个地址(ip+端口)
    String url() default "";

    // 如果调用的接口 404,true:浏览器也响应 404;false:浏览器响应 500(看程序日志才会知道是 404)
    boolean dismiss404() default false;

    // Feign配置类,可以自定义Feign的Encoder、Decoder、LogLevel、Contract
    Class<?>[] configuration() default {};

    // 定义容错的处理类,当调用远程接口失败或超时时,会调用对应接口的容错逻辑,fallback指定的类必须实现@FeignClient标记的接口
    Class<?> fallback() default void.class;

    // 工厂类,用于生成 fallback 类示例,通过这个属性我们可以实现每个接口通用的容错逻辑,减少重复的代码
    Class<?> fallbackFactory() default void.class;

    // 定义当前 FeignClient 访问接口时的统一前缀
    // 最终的全路径必须和服务提供方的 url 完全一致,如果这里加了 path,服务提供方没有这个,就会报 404
    String path() default "";

    boolean primary() default true;
}

超时配置

这个太复杂了,不同的场景配置不一样

feign、openfeign、httpclient、httpclient5、ok-http、ribbon、hystrix

连接超时、读取超时

只能看自己用的什么版本,什么组件

HttpClinet5

标签:OpenFeign,api,default,dg,细节,base,使用,com,class
From: https://www.cnblogs.com/cyrushuang/p/18301829

相关文章

  • Java的三大使用平台
    一、Java的三大使用平台:1.JavaSE2.JavaME3.JavaEE 二、JavaSEJavaSE用于桌面应用的开发,是其它2个版本的基础。何谓桌面应用?用户只要打开程序,程序的界面会让用户在最短的时间内找到他们需要的功能,同时主动带领用户完成他们的工作并得到最好的体验。学习JavaSE的目的......
  • Scp 使用密码拷贝文件
    在Linux系统中,scp是一个非常好用的命令,可以用于在本地和远程计算机之间复制文件和目录。使用scp命令复制文件时,你可以使用两种方法来提供密码: 1.直接拷贝(手动输入密码)下面是使用scp命令复制文件并手动输入密码的方法:scpusername@remote_host:/path/to/remote/file/pa......
  • 真实案例:使用LLM大模型及BERT模型实现合同审查系统
    引言:合同审查作为法律实务中的关键环节,其准确性和效率直接影响到企业的法律风险管理。传统的人工审查方式存在耗时长、成本高、易出错等问题。随着人工智能技术的不断进步,特别是LLM和BERT模型的应用,合同审查的自动化和智能化成为可能。概述:合同审查管理系统是一个集成了LLM和B......
  • Qt - QTimer 定时器深入使用
    QTimer1、定时器执行start(0)时:会立即启动定时器,且超时时间为0,即一直超时并执行超时函数 2、对于同一定时器,当定时器是start状态,再次执行start函数,Qt会将定时器stop后重新启动该定时器 3、对于同一定时器,当再次执行start函数,Qt会以新的超时时间开始该定时器,比如setInterva......
  • Linux下的gdb日常使用
    100个GDB小技巧0.常用0.1获取源代码行与程序地址之间的对应关系(1)显示当前执行指令所在的源代码行:infoline(2)显示特定函数或源代码行的地址信息:infoline<function-name>|<source-file>:<line-number>例如,要查看函数myFunction的起始地址,可以使用:infolinemy......
  • Provide/Inject + TypeScript 使用
    本文是一篇关于 provide/inject TypeScript用法介绍的简短文章,在Vue3以及Vue2的 @vue/composition-api 都支持 provide/inject TypeScript用法。Provide类型安全刚开始在组合API中使用 provide/inject 的时候,我写的代码如下:import{inject}from'vue';......
  • 线程池使用场景 调用多个微服务汇总数据
    importlombok.SneakyThrows;importjava.text.SimpleDateFormat;importjava.util.concurrent.*;publicclassT{@SneakyThrowspublicstaticvoidmain(String[]args){shopping_threadPool();}/*汇总数据使用线程池+Future耗时≈所有......
  • 【Java】 IO流使用方法 (常见方法)
    Java系列文章目录补充内容Windows通过SSH连接Linux第一章Linux基本命令的学习与Linux历史文章目录Java系列文章目录一、前言二、学习内容:三、问题描述四、解决方案:4.1File的使用4.2防止乱码问题五、总结:5.1学习总结:一、前言学习文件IO流学习文档的使用具......
  • 在C/C++中嵌入Lua代码及使用VS Code调试
     Lua在设计之初就是为了嵌入到应用程序中,为这些应用程序提供灵活的扩展和定制功能。Lua的核心是用C语言编写的,所以Lua脚本可以很容易地与C/C++代码进行交互,通过Lua脚本,用户可以在不修改原有C/C++代码的基础上,实现功能的扩展和定制。 在C/C++程序中可以使用Lua来编写一些需......
  • Spring使用实现类注入为什么会导致高耦合度(举例)
    场景描述假设我们要开发一个日志记录器组件,记录日志的方式可能有多种实现:控制台输出、文件输出、甚至是发送到远程服务器。为了实现这个功能,我们可以定义一个Logger接口来抽象日志记录功能,然后根据不同的需求创建不同的实现类。1.接口注入的实现方式首先,我们定义一个Logger......