SpringCloud微服务系列- 服务间通信之服务间调用
SpringCloud微服务系列- 服务间通信之服务间调用
概述
OpenFeign是一个基于Java的声明式HTTP客户端框架,用于简化HTTP调用。它提供了一种简单的方式来定义RESTful服务的客户端接口。通过注解和接口定义,开发人员可以轻松地编写代码来调用远程HTTP服务。OpenFeign还提供了负载均衡、服务发现和错误处理等特性,可用于与分布式系统集成。
一、OpenFeign的基本介绍
1. OpenFeign 是什么
Spring Cloud OpenFeign用于Spring Boot应用程序的声明式REST客户端。
2. OpenFeign能干嘛
Feign旨在使编写Java Http客户端变得更容易。前面在使用RestTemplate时,利用RestTemplate对Http请求的封装处理,形成了一套模板化的调用方法。
声明式远程服务调用:接口 + 注解,就可以快速完成服务调用
减少代码量以及提高代码可读性
3. OpenFeign和Feign两者区别
Feign是一个声明式WebService客户端。使用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>
三、OpenFeign日志增强
开发调试阶段可开启OpenFeign日志增强
OpenFeign虽然提供了日志增强功能,但是默认是不显示任何日志的,不过开发者在调试阶段可以自己配置日志的级别。OpenFeign的日志级别如下:
1) NONE:默认的,不显示任何日志;
2) BASIC: 仅记录请求方法、URL、响应状态码及执行时间;
3) HEADERS:除了BASIC中定义的信息之外,还有请求和响应的头信息;
4) FULL: 除了HEADERS中定义的信息之外,还有请求和响应的正文及元数据。
四、OpenFeign超时机制
超时机制也是保护服务的一种手段
问题:
1)服务消费者在调用服务提供者的时候发生了阻塞、等待的情形,这个时候,服务消费者会一直等待下去。
2)在某个峰值时刻,大呈的请求都在同时请求服务消费者,会造成线程的大呈堆积,势必会造成雪崩。
3)利用超时机制来解决这个问题,设置一个超时时间,在这个时间段内,无法完成服务访问,则自动断开连接。