Java面试——中间件

OpenFeign

1、openFeign是一个HTTP客户端,它融合了springmvc的注解,使之可以用REST风格的映射来请求转发。
2、可以把openFegin理解为是controller层或是service层。可以取代springmvc控制层作为请求映射,亦或是作为service层处理逻辑,只不过这里,openFeign只是做一个请求转发的逻辑操作。
3、openFeign整合了hystrix做熔断处理,同时,可以和ribbon客户端负载均衡、Eureka注册中心配合使用,实现负载均衡的客户端。
4、openFeign有一个很重要的功能:fallback,其实它是hystrix的特性

Feign

Feign集成了Ribbon、RestTemplate实现了负载均衡的执行Http调用,只不过对原有的方式(Ribbon+RestTemplate)进行了封装,开发者不必手动使用RestTemplate调服务,而是定义一个接口,在这个接口中标注一个注解即可完成服务调用,这样更加符合面向接口编程的宗旨,简化了开发。

OpenFeign的工作原理

OpenFeign是springcloud在Feign的基础上支持了SpringMVC的注解,如@RequestMapping等等。OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。

OpenFeign远程调用的底层原理
OpenFeign是一个声明式的Web服务客户端,它使得编写Web服务客户端变得更加容易。它的底层原理主要基于几个关键组件的协作:

「核心组件」

「Feign Client」
在OpenFeign中,你可以通过创建一个接口并使用@FeignClient注解来定义一个Feign客户端。这个接口定义了服务的请求绑定,参数和回调处理。

「Contract」
Contract定义了如何将方法调用转换为HTTP请求。默认情况下,Feign使用自己的注解,但是也可以配置为使用JAX-RS或Spring MVC注解。

「Encoder & Decoder」
「Encoder」: 负责将Java对象编码成HTTP请求体。
「Decoder」: 负责将HTTP响应体解码成Java对象。

「Client」
Client是一个用于发送请求的组件。Feign有多个Client实现,如默认的Java HttpURLConnection、Apache HttpClient和OkHttp。

「Logger」
Feign提供了日志机制来记录HTTP请求和响应的详细信息。

OpenFeign 工作流程

  • 「接口定义」: 开发者定义一个接口,并使用@FeignClient注解来标记它需要调用的远程服务。
  • 「动态代理」: 当应用启动时,Spring Cloud Feign会为这个接口生成一个动态代理。
  • 「构造请求」: 当调用接口的方法时,Feign通过Contract组件将方法调用转换为HTTP请求。
  • 「编码请求」: Encoder组件将方法参数等信息编码成请求体。
  • 「发送请求」: Client组件负责发送实际的HTTP请求到服务端。
  • 「处理响应」: 服务端处理请求并返回响应,Decoder组件将响应体解码成Java对象。
  • 「异常处理」: 如果在调用过程中发生错误,Feign会使用ErrorDecoder组件来处理异常。
  • 「结果返回」: 最终,调用结果会返回给方法的调用者。
  • 「负载均衡」OpenFeign与Spring Cloud LoadBalancer或Netflix Ribbon集成,可以实现客户端负载均衡。当有多个实例提供相同服务时,Feign会根据负载均衡策略选择一个实例来发送请求。

「总结」
OpenFeign的底层原理是通过动态代理技术,将接口的方法调用转换为HTTP请求,并通过Client组件发送到远程服务。它通过Encoder和Decoder处理请求和响应的编码和解码,并且可以与负载均衡器集成以实现服务的高可用性。

OpenFeign如何使用

  1. 首先,调用以及被调用的微服务双方都应该被注册到注册中心。<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值