当前位置: 首页 > news >正文

OpenFeign

简介

Feign是Netflix开发的声明式、模板化的HTTP客户端,利用它可以帮助我们更加便捷、优雅地调用HTTP API。
Feign声明在服务消费端,也就是在调用端。
Spring Cloud Openfeign对Feign进行了增强,使其支持SpringMVC注解,另外还整合了Ribbon和Nacos,从而使得Feign的使用更加方便。

快速使用

第一步:添加依赖

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

第二步:编写调用接口

@ComponentScan
//name:指定调用Rest接口所对应的服务名
//path:指定要调用的Rest接口所在的Controller指定的RequestMapping,如果Rest接口所在的Controller没有指定RequestMapping,则不用指定
@FeignClient(name = "nacos-payment",path = "/payment")
public interface PaymentFeignService {//声明Rest接口需要调用的方法@GetMapping("/nacos/{id}")String getPayment(@PathVariable("id") Integer id);
}

第三步:发起调用,像调用本地方式一样调用远程服务

@RestController
@RequestMapping("/order")
public class OrderController {@Resourceprivate PaymentFeignService paymentFeignService;@GetMapping("/nacos/{id}")public String getPayment(@PathVariable("id") Integer id) {return paymentFeignService.getPayment(id);}}

第四步:在主启动类上添加@EnableFeignClients注解

@EnableFeignClients
@SpringBootApplication
public class Consumer9002Application {public static void main(String[] args) {SpringApplication.run(Consumer9002Application.class, args);}}

第五步:运行测试

在这里插入图片描述
在这里插入图片描述

OpenFeign自定义配置

契约配置(了解)

本技术了解就行,一般情况下不会用到,旧项目改造时可能会用到。

第一步:修改application.yml,在其中添加:
spring:## feign配置openfeign:client:config:nacos-stock:contract: feign.Contract.Default  # 设置支持原生注解
第二步:Feign接口代码:
@Service
@FeignClient(name = "nacos-stock", path = "/stock")
public interface StockFeignService {//@GetMapping("/reduct")@RequestLine("GET /reduct")  //feign原生注解String reduct();
}

日志配置

第一步:定义一个配置类,指定日志级别
@Configuration
public class OpenFeignConfig {@BeanLogger.Level feignLoggerLevel(){//日志级别return feign.Logger.Level.FULL;}
}

日志等级有4种:

  • NONE:默认值 ,不记录任何日志。性能最佳,适用于生产
  • BASIC:仅记录请求方法、URL、响应状态代码以及执行时间。适用于生产环境追踪问题
  • HEADERS:在BASIC级别的基础之上,记录请求和响应的HEADER
  • FULL:记录请求和响应的HEADER、BODY和元数据。比较适用于开发及测试环境定位问题

注意:上面类上使用注解@Configuration就会全局生效。如果想指定对特定微服务生效,就不能在配置类上指定注解@Configuration,可以采用如下形式:

@FeignClient(name = "nacos-payment",path = "/payment",configuration = OpenFeignConfig.class)
public interface PaymentFeignService {

因为OpenFeign默认是debug级别而SpringBoot默认是info级别,所以要想看到日志信息,需要在applicaion.yml中配置:

logging:       ----------level:com.hc.consumer.feign: debug

浏览器中再次请求,可在控制台中看到如下所示的日志信息:

在这里插入图片描述

上面编号①处配置的日志级别是针对整个项目而言的,也可以通过下面方式为特定的服务指定日志级别:

openfeign:client:config:nacos-stock: # 服务名loggerLevel: BASIC

超时配置

方式一:在配置类中添加代码:
@Bean
public Request.Options options(){return new Request.Options(5000,10000);
}
方式二:在application.yml中配置
spring:# 超时配置openfeign:client:config:nacos-stock:# 连接超时时间,默认2sconnectTimeout: 5000# 请求处理超时时间,默认5sreadTimeout: 6000

连接超时不好测试,但读取超时,可以通过设置服务提供者中sleep实现。
在这里插入图片描述
在这里插入图片描述

注:如果两个服务提供者,一个会超时,一个不会,消费者调用到超时提供者时,不会自动切换到不超时的提供者

自定义拦截器

示例:自定义拦截器模拟实现认证逻辑。
第一步:自定义拦截器类:
public class FeiAuthInterceptor implements RequestInterceptor {@Overridepublic void apply(RequestTemplate requestTemplate) {final String access_token = UUID.randomUUID().toString();//模拟记录日志System.out.println(access_token);requestTemplate.header("Authorization", access_token);requestTemplate.uri("/nacos/666999");}
}
第二步:在配置类中生成Bean:
@Bean
public FeiAuthInterceptor feiAuthInterceptor(){return new FeiAuthInterceptor();
}
第三步:测试:

在这里插入图片描述

控制台输出结果:
在这里插入图片描述

上面第二步也可以在application.yml中通过配置的方式实现:

feign:client:config:# 配置方式指定拦截器requestInterceptors[0]: com.hc.consumer.interceptor.FeiAuthInterceptor 

http://www.mrgr.cn/news/24281.html

相关文章:

  • 原型模式详细介绍和代码实现
  • 一个简约的uniapp登录界面,基于uniapp+vue3+uview-plus
  • Vue3.5正式上线,有哪些新特性和用法?
  • Unity6的GPUDriven渲染到底是什么?
  • JavaScript高阶面试题:(第一天)
  • maven中的仓库的配置与优先级
  • 水平垂直居中的几种方法(总结)
  • 基于Spring Boot的电子请柬私人定制销售平台的设计与实现---附源码78900
  • 史级低价1元《魔域口袋版》神话斗神·黑悟空 带领战队傲视群雄
  • 住宅建筑电气火灾预防
  • electron有关mac构建
  • 【C语言进阶】C语言动态内存管理:深入理解malloc、calloc与realloc
  • 中国企业500强!最新名单揭晓→
  • 基于SpringBoot+Vue的考务管理系统
  • 【TCP】相关机制:异常处理
  • 多线程获取留言板
  • css总结(记录一下...)
  • Pycharm 输入三个引号没有自动生成函数(方法)注释
  • 小白也能懂的ComfyUI使用教程和问题解决【AIStarter】
  • 【C++】创建静态数组,动态数组,vector数组