欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

SpringCloudOpenFeign的功能与使用

时间:2023-07-07
文章目录

1.OpenFeign使用步骤

1.1OpenFeign是啥玩意儿?他和Feign有啥区别?1.2导入pom文件1.3 yml文件1.4主启动类1.5 service类1.6 controller类1.7 结果展示1.8 总结及注意事项 2.OpenFeign超时控制3.OpenFeign日志打印功能

3.1什么是OpenFeign日志3.2日志级别3.3配置日志bean 1.OpenFeign使用步骤 1.1OpenFeign是啥玩意儿?他和Feign有啥区别?

Feign是一个声明式的Web Service客户端。它的出现使开发Web Service客户端变得很简单。使用Feign只需要创建一个接口加上对应的注解,比如:FeignClient注解。Feign有可插拔的注解,包括Feign注解和JAX-RS注解。
Feign也支持编码器和解码器,Spring Cloud Open Feign对Feign进行增强支持Spring MVC注解,可以像Spring Web一样使用HttpMessageConverters等。
Feign是一种声明式、模板化的HTTP客户端。在Spring Cloud中使用Feign,可以做到使用HTTP请求访问远程服务,就像调用本地方法一样的,开发者完全感知不到这是在调用远程方法,更感知不到在访问HTTP请求。(官网上就是这么写的)

说白了你以前调用微服务接口必须通过restTemplate.getForObject去远程调用,但是Feign的出现你就不用非得使用restTemplate了,你可以向调用本地接口一样。OpenFegin就是在Fegin的基础上可以支持SpringMVC注解如requestMapping之类的。Fegin和OpenFegin里面都支持负载均衡

1.2导入pom文件

在pom文件当中要加上OpenFegin的依赖。

org.springframework.cloud spring-cloud-starter-openfeign public static void main(String[] args) { SpringApplication.run(OrderFeginMain80.class,args); }}

1.5 service类

@Component@FeignClient(value = "CLOUD-PAYMENT-SERVICE")//一定要加这个注解value值为服务名称标注要找哪个服务提供者public interface PaymentFeginService { @GetMapping(value = "/payment/get/{id}")//注解的路径要和提供服务的controller路径一样 CommonResult getPaymentById(@PathVariable("id") Long id);//和controller一样}

1.6 controller类

@RestController@Slf4jpublic class PaymentFeginController { @Autowired private PaymentFeginService paymentFeginService; @GetMapping(value = "/consumer/payment/get/{id}") public CommonResult getPaymentById(@PathVariable("id") Long id) { return paymentFeginService.getPaymentById(id);//直接通过service类调用而不是通过restTemplate远程调用 }}

这个虽然看起来是调你本地的应用但是他是在调用你远程提供的服务所以你要确保你远程的服务要提供相应的功能

1.7 结果展示 1.8 总结及注意事项

首先你在消费者的启动类上要加上@EnableFeginClients,然后你在消费者的service类中要加上@FeginClient(服务名称)这样的注解,然后这个接口中的方法的参数,路径要和你提供服务的方法一模一样(名称可以不一样)否则会报错。

@Component@FeignClient(value = "CLOUD-PAYMENT-SERVICE")//一定要加这个注解value值为服务名称标注要找哪个服务提供者public interface PaymentFeginService { @GetMapping(value = "/payment/find/{id}")//我把这个路径改了 CommonResult getPaymentById(@PathVariable("id") Long id);}

结果:

2.OpenFeign超时控制

当消费者访问服务提供者这个过程当中出现了网络超时那么就会报超时的错误。比如说我重新写一个方法在return之前我做一些延时操作那么就会报超时的错误

比如说在服务提供者加上这个方法,暂停3s后返回serverPort

@GetMapping(value = "/testTimeOut") public String TimeOutFeignTest(){ try { TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) { e.printStackTrace(); } return serverPort; }

(OpenFegin配置略过)

结果是

出现了Read timed out的错误,那么我们怎么让延长这个超时时间呢?只需要更改yml文件就好了

server: port: 80eureka: client: register-with-eureka: false service-url: defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eurekaribbon: ReadTimeout: 5000 #把他改成5s钟超时就行了 ConnectTimeout: 5000

改完之后结果是

3.OpenFeign日志打印功能 3.1什么是OpenFeign日志

Feign提供了日志打印功能,我们可以通过配置来调整日志级别,从而了解Feign中Http请求的细节。说白了就是对Fegin接口的调用情况进行监控和输出。

3.2日志级别

NONE:默认的,不显示任何日志;

BASIC:仅记录请求方法、URL、响应状态及执行时间;

HEADERS:除了BASIC中定义的信息之外,还有请求和响应的头信息;

FULL:除了HEADERS中定义的信息之外,还有请求和响应的正文及元数据。

3.3配置日志bean

@Configurationpublic class FeginConfig { @Bean Logger.Level feginLoggerLevel(){ return Logger.Level.FULL; }}

yml文件加上这一段

logging: level: #他是什么级别监控哪个接口 com.wjz.springcloud.service.PaymentFeginService: debug

调用这个接口你可以在后台清晰地看到HTTP调用的信息


参考:尚硅谷。

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。