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)利用超时机制来解决这个问题,设置一个超时时间,在这个时间段内,无法完成服务访问,则自动断开连接。

posted @ 2024-06-29 11:07  欢乐豆123  阅读(68)  评论(0编辑  收藏  举报