springcloud OpenFeign的自定义配置及使用

Feign提供了很多的扩展机制,让用户 可以更加灵活的使用

日志配置

遇到bug,比如 接口调用失败,参数没收到等问题,或者想看看调用性能,就需要配置Feign的日志了,以此让Feign把请求信息输出来。

1、定义一个配置类,指定日志级别

/*
* 全局配置 加上@Configuration,则会将配置作用所有的服务中心
* 局部配置 如果只想作用于某一个服务,则不加@Configuration 则为局部配置
* */
@Configuration
public class FeignConfig {
    @Bean
    public Logger.Level feignLoggingLevel(){
        return Logger.Level.FULL;
    }
}

日志等级有四种,分别是:

NONE :【性能最佳,适用于生产】不记录任何日志(默认值)

BASIC:【适用于生产环境追踪问题】 仅记录请求方法、URL、响应状态代码以及执行时间

HEADERS:记录BASIC 级别的基础上,记录请求和相应的header

FULL:【比较适用于开发以及测试环境定位问题】记录请求和相应的header、body和元数据

2、局部配置,让调用的微服务生效,在@FeignClient注释中指定使用的配置类

@FeignClient(name = "stock-nacos",path = "/stock/")
public interface FeignStockService {
    @RequestMapping("add")
    String add();
}

 需要注意的是:如若调用的微服务的参数注解是@PathVariable  则在消费者中需要@PathVariable("参数名")这种写法

调用的微服务的接口:

@RestController
@RequestMapping("/stock/")
public class StockController {

    @Value("${server.port}")
    String port;

    @GetMapping("add/{id}")
    public String add(@PathVariable String id){
        System.out.println("库存减少");
        return "库存减少:"+port+"参数是:"+id;
    }
}
消费者的写法:
@FeignClient(name = "stock-product",path = "/stock/")
public interface FeignProductService {
    @RequestMapping("add/{id}")
    String add(@PathVariable("id") String id);
}

3、在yml配置文件中执行Client的日志级别才能正常输出日志,格式是“logging.level.feign接口路径=debug”

#springboot默认级别是info ,feign的debug日志级别就不会输入
logging:
  level:
    com.wxx.order.feign: debug

补充:局部配置的方式

1)注解的方式:

  • 在配置文件FeignConfig的配置中将@Configuration去掉
//@Configuration
public class FeignConfig {
    @Bean
    public Logger.Level feignLoggingLevel(){
        return Logger.Level.FULL;
    }
}
  • 在需要显示日志的service中的@FeignClient中添加configuration属性 
@FeignClient(name = "stock-product",path = "/stock/",configuration = FeignConfig.class)
public interface FeignProductService {
    @RequestMapping("add2/{id}")
    String add2(@PathVariable("id") String id);
}

2)在yml中配置

对应属性配置类:org.springframework.cloud.openfeign.feignClientProperties.FeignClientConfiguration

#Feign局部日志配置
feign:
  client:
    config:
      stock-product: #对应微服务名称
        loggerlevel: FUll

契约配置

springcloud在Feign的基础上做了扩展,使用springmvc的注解来完成Feign的功能,原生的Feign是不支持springmvc注解的,如果想在springmvc中使用原生的注解方式来定义客户端也是可以的,通过配置契约来改变这个配置,Spring cloud中默认使用的是SpringMvcContract

   spriongcloud1 早期版本就是用的feign 随着netflex的停更替换成了Open Feign

比如:原来的springcloud项目 想要更新版本的替换成OpenFeign的时候 会遇到需要修改大量的代码改成openFeign的语法,对开发人员造成极大的不方便,所以会使用到契约配置

1、修改配置文件的方式

  • 修改契约配置,支持Feign原生的注解
public class FeignConfig {
   

    @Bean
    public Contract feignContract(){
        return new Contract.Default();
    }

}

注意:修改契约配置后,FeignProductService不在支持springmvc的注解,需要使用Feign原生的注解

  •  FeignProductService中配置使用Feign原生的注解
@FeignClient(name = "stock-product",path = "/stock/",configuration = FeignConfig.class)
public interface FeignProductService {
    @RequestLine("GET add2/{id}")
    String add2(@Param("id") String id);
}

2、通过yml的方式配置契约

feign:
  client:
    config:
      stock-product: #对应微服务名称
        loggerlevel: FUll
        contract: feign.Contract.Default #设置默认契约 还原成原生注解

设置超时时间

通过Options可以配置连接超时时间和读取超时时间,Options的第一个参数是连接的超时时间(ms),默认2s,第二个是请求处理的超时时间(ms),默认值是5s

全局配置

@Configuration
public class FeignConfig { 
    @Bean
    public Request.Options options(){
        return new Request.Options(5000,10000);
    }
}

yml配置

feign:
  client:
    config:
      stock-product: #对应微服务名称
        #请求连接超时时间默认2s
        connectTimeOut: 5000
        #请求处理超时时间,默认5s
        readTimeout: 10000

    补充说明:Feign的底层使用的是Ribbon,但超时时间可以Feign配置为准

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值