SpringCloud微服务系列- 服务间通信之服务间调用
SpringCloud微服务系列- 服务间通信之服务间调用
概述
声明式客户端是一种通过定义接口或注解来声明请求,而不是编写具体的请求逻辑代码的客户端模式。
这种方式简化了与远程服务进行通信的过程,开发者无需手动处理底层的HTTP请求或序列化/反序列化过程。
一、OpenFeign的基本介绍
1. OpenFeign 是什么
OpenFeign是一个基于Java的声明式HTTP客户端框架,用于简化HTTP调用。它提供了一种简单的方式来定义RESTful服务的客户端接口。通过注解和接口定义,开发人员可以轻松地编写代码来调用远程HTTP服务。OpenFeign还提供了负载均衡、服务发现和错误处理等特性,可用于与分布式系统集成。
通过声明式远程服务调用:接口 + 注解,就可以快速完成服务调用。 减少代码量以及提高代码可读性。
2. OpenFeign和Feign两者区别
Feign是一个声明式WebService客户端,它旨在使编写Java Http客户端变得更容易。在使用RestTemplate时,利用RestTemplate对Http请求的封装处理,形成了一套模板化的调用方法。
使用Feign能让编写Web Service客户端更加简单。它的使用方法是定义一个服务接口然后在上面添加注解。Feign也支持可拔插式的编码器和解码器。Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters。
1)Feign
Feign是Spring Cloud组件中的一个轻量级RESTful的HTTP服务客户端,Feign内置了Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务。
2)OpenFeign (增强版)
OpenFeign是Spring Cloud在Feign的基础上支持了SpringMVC的注解,如@RequesMapping等等。OpenFeign的@Feignclient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。
包的引入方式:
Feign: spring-cloud-starter-feign
OpenFeign: spring-cloud-starter-openfeign
二、OpenFeign的使用案例
cloud-consumer-openfeign-order80
<!-- 引入服务调用依赖OpenFeign --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
orderController 控制层
1 /** 2 * 订单控制层 3 */ 4 @RestController 5 @RequestMapping("order") 6 public class OrderController { 7 8 @Autowired 9 private PaymentFeignService paymentFeignService; 10 11 /** 12 * openfeign 远程服务调用 13 * @return 14 */ 15 @GetMapping("index") 16 public String index(){ 17 return paymentFeignService.index(); 18 } 19 20 /** 21 * 测试超时机制 22 * @return 23 */ 24 @GetMapping("timeout") 25 public String timeout(){ 26 return paymentFeignService.timeout(); 27 } 28 }
PaymentFeignService接口
1 /** 2 * 支付远程调用openfeign接口 3 * FeignClient 声明为openfeign客户端 调用服务生产者名 4 */ 5 @FeignClient("CLOUD-PAYMENT-PROVIDER") 6 public interface PaymentFeignService { 7 8 @GetMapping("/payment/index") 9 String index(); 10 11 @GetMapping("/payment/timeout") 12 String timeout(); 13 }
测试结果:
三、OpenFeign日志增强
开发调试阶段可开启OpenFeign日志增强
OpenFeign虽然提供了日志增强功能,但是默认是不显示任何日志的,不过开发者在调试阶段可以自己配置日志的级别。OpenFeign的日志级别如下:
1) NONE:默认的,不显示任何日志;
2) BASIC: 仅记录请求方法、URL、响应状态码及执行时间;
3) HEADERS:除了BASIC中定义的信息之外,还有请求和响应的头信息;
4) FULL: 除了HEADERS中定义的信息之外,还有请求和响应的正文及元数据。
四、OpenFeign超时机制
超时机制也是保护服务的一种手段
问题:
1)服务消费者在调用服务提供者的时候发生了阻塞、等待的情形,这个时候,服务消费者会一直等待下去。
2)在某个峰值时刻,大呈的请求都在同时请求服务消费者,会造成线程的大呈堆积,势必会造成雪崩。
3)利用超时机制来解决这个问题,设置一个超时时间,在这个时间段内,无法完成服务访问,则自动断开连接。