openFeign组件的使用

本文介绍了Feign在SpringCloud中的应用,与RestTemplate的对比,以及如何通过SpringMVC注解进行服务调用。重点讲解了Feign的自定义配置,包括日志级别设置和全局/局部配置选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记录学习中遇到的Feign远程调用

什么是openFeign组件

Feign是一个声明式的伪HTTP客户端,它使得写HTTP客户端变得简单(1.使用Feign,只需写一个口和注解,2.调用服务代码,自动完成数据传送过程中对象转换),它具有可插拔的注解特性,可使用Feign注解和JAX-RX注解,Feign默认集成了Ribbon,默认实现了负载均衡的效果,并且springcloud为Feign添加了springmvc的注解的支持,它能解决RestTemplate实现服务间通信所有问题。官网:OpenFeign · GitHub

这里有一个对比对象RestTemplate

它也是服务调用的一个组件,为spring框架封装HttpClient对象

String restTemplateproduct=restTemplate.getForObject("http://服务名/url?参数"+name,String.class);

RestTemplate与openFeign相比,存在下面这些问题

  • 每次调用服务都需要写这些代码,存在代码冗余
  • 路径写死,服务地址如果进行修改,维护成本高
  • 必须集成Ribbon来实现负载均衡
  • 不能自动转换响应结果为对应对象

openFeign服务调用

1.引入依赖openFeign依赖

  <!--openfeign-->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>

2.启动类加入注解,开启openFeign支持

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients //开启openFeign支持
public class OderNacosMain84 {
    public static void main(String[] args) {
        SpringApplication.run(OderNacosMain84.class,args);
    }
}

3.编写Feign客户端

@FeignClient(value = "nacos-payment-provider",fallback = PaymentFallbackService.class)
public interface PaymentService {
        @GetMapping(value = "/paymentSQL/{id}")
        public CommonResult<Payment> paymentSQL(@PathVariable("id")Long id);
    }

这个客户端主要是基于SpringMVC的注解来声明远程调用的信息

服务名称:nacos-payment-provider   请求方式:GET

请求路径:/paymentSQL/{id}      请求参数:Long id

返回值类型:CommonResult<Payment>

这样,Feign就可以帮助我们发送http请求,无需自己使用RestTemplate来发送了。

Feign的自定义配置

Feign可以支持很多的自定义配置,如下表所示:

类型作用说明
feign.Logger.Level修改日志级别包含四种不同的级别:NONE、BASIC、HEADERS、FULL
feign.codec.Decoder响应结果的解析器http远程调用的结果做解析,例如解析json字符串为java对象
feign.codec.Encoder请求参数编码将请求参数编码,便于通过http请求发送
feign. Contract支持的注解格式默认是SpringMVC的注解
feign. Retryer失败重试机制请求失败的重试机制,默认是没有,不过会使用Ribbon的重试

这里使用openFeign调用详细日志展示举例

调试程序时,开启详细的日志展示,Feign可以对Feign每个客户端指定日志记录策略,每个客户端都会创建一个Logger,默认情况下,logger的名称是Feign的全限定名。

feign客户端配置各自的logger.level对象,feign记录日志logger.level有四种

  • NONE:不记录任何日志信息
  • BASIC:仅仅记录请求的方法,url ,响应状态代码和执行时间
  • HEADERS:记录BASIC的基础上,还记录了请求和响应的头信息
  • FULL:记录请求和响应的header,body和元数据

配置文件(application.yml)方式

 开启指定服务展示
feign:  
  client:
    config: 
      PRODUCTS: # 针对某个微服务的配置
        logger-level: FULL #  日志级别 
全局开启服务展示
feign:  
  client:
    config: 
      default: # 这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置
        logger-level: FULL #  日志级别 

java代码方式

基于Java代码来修改日志级别,先声明一个类,然后声明一个Logger.Level的对象:

public class DefaultFeignConfiguration  {
    @Bean
    public Logger.Level feignLogLevel(){
        return Logger.Level.BASIC; // 日志级别为BASIC
    }
}

@EnableFeignClients#defaultConfiguration 自定义全局默认配置。

@EnableFeignClients(defaultConfiguration = DefaultFeignConfiguration .class) 

@FeignClient#configuration 单个Feign接口局部配置。

@FeignClient(value = "服务名", configuration = DefaultFeignConfiguration .class) 

 结束:

 这是在sentinel整合ribbon+openFeign+fallback 简单的使用Feign远程调用

如果要查看更加详细的Feign配置

转载Spring Cloud Feign(第六篇) 之自定义配置_annotatedparameterprocessor-优快云博客

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值