OpenFeign的实际运用

OpenFeign的发展历程

(时光轴懒得画了,文字描述一下,有兴趣的自行百度下)
1)Ribbon是一个基于HTTP和TCP客户端的负载均衡的工具。它可以在客户端配置RibbonServerList(服务端列表),使用HttpClient或RestTemplate模拟http请求,步骤相当繁琐。
2)Feign是在Ribbon的基础上进行了一次改进,是一个使用起来更加方便的HTTP客户端。采用接口的方式,只需要创建一个接口,然后在上面添加注解即可,将需要调用的其他服务的方法定义成抽象方法即可,不需要自己构建http请求。
3)OpenFeign是Spring Cloud在Feign的基础上支持了SpringMVC的注解,如@RequestMapping等等。OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。

负载均衡

1)集中式负载均衡
即在 consumer 和provider 之间使用独立的负载均衡设施(比如nginx等,通过某种策略转发给provider )
在这里插入图片描述
2)进程内负载均衡
将负载均衡逻辑集成到consumer, consumer从注册中心获知有那些地址可以用,然后自己再从这些地址中选择出一个合适的 privider
在这里插入图片描述
3)二者之间有什么区别?

  • 集中式负载均衡 , 有一个独立的负载均衡服务器部署在 客户端 与服务之间 ,由它来接受请求并分配给不同的服务
  • 进程式负载均衡,将负载均衡逻辑集成到consumer .consumer从注册中心获悉那些服务可以用 ,再按照负载均衡策略使用服务

OpenFeign 三要素

  • 注册中心(代理接口注册)
  • 客户端(调用接口)
  • 服务提供者(实际接口)

注册中心(nacos提供)

在这里插入图片描述

客户端

1)定义服务接口

  • ResourceFeignClient接口类(@FeignClient 和 fallbackFactory 配置)
    在这里插入图片描述
  • ResourceFeignClientFallback实现类(FallbackFactory)在这里插入图片描述
  • 依赖服务
    在这里插入图片描述
    2)OpenFeign动态代理流程
    在这里插入图片描述

服务端

(提供扫描接口所在包路径和接口发现注解)
在这里插入图片描述

接口调用注意事项

  • 当参数比较复杂时,feign即使声明为get请求也会强行使用post请求(推荐均使用 post 请求方式);
  • 使用实体类进行传参时,请求方式不能为 Get ,若参数有其他类型变量时,则必须使用 @RequestBody;
  • 使用多个普通变量进行传参时,需配合@RequestParam进行使用,单个变量则不需要;
  • 当同时使用实体类和普通变量进行传参时,请求方和服务方的实体类都得使用 @RequestBody 注解,否则服务方的实体类无法接收请求方实体类参数值;
  • @RequestBody 和 @RequestParam 可以同时使用,但是请求方式必须是 post ;
  • 服务方使用实体类接收参数时,请求方可以定义该实体类内的各个变量,feign会将其一一映射,但必须使用 @RequestParam注解申明变量;

猜你喜欢

转载自blog.csdn.net/qq_23845083/article/details/129730414