【微服务十二】SpringCloud之OpenFeign的核心组件(Encoder、Decoder、Contract)

发布时间:2023-02-14 13:30

一、前言

在前面的文章:

  1. SpringCloud之Feign实现声明式客户端负载均衡详细案例
  2. SpringCloud之OpenFeign实现服务间请求头数据传递(OpenFeign拦截器RequestInterceptor的使用)
  3. SpringCloud之OpenFeign的常用配置(超时、数据压缩、日志)

我们聊了以下内容:

  1. OpenFeign的概述、为什么会使用Feign代替Ribbon?
  2. Feign和OpenFeign的区别?
  3. 详细的OpenFeign实现声明式客户端负载均衡案例
  4. OpenFeign中拦截器RequestInterceptor的使用
  5. OpenFeign的一些常用配置(超时、数据压缩、日志输出)

本文我们继续讨论OpenFeign有哪些核心组件?

PS:本文基于的SpringCloud版本

 <properties>
    <spring-boot.version>2.3.7.RELEASEspring-boot.version>
    <spring-cloud.version>Hoxton.SR9spring-cloud.version>
    <spring-cloud-alibaba.version>2.2.6.RELEASEspring-cloud-alibaba.version>

properties>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-dependenciesartifactId>
            <version>${spring-boot.version}version>
            <type>pomtype>
            <scope>importscope>
        dependency>
        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-dependenciesartifactId>
            <version>${spring-cloud.version}version>
            <type>pomtype>
            <scope>importscope>
        dependency>
        
        <dependency>
            <groupId>com.alibaba.cloudgroupId>
            <artifactId>spring-cloud-alibaba-dependenciesartifactId>
            <version>${spring-cloud-alibaba.version}version>
            <type>pomtype>
            <scope>importscope>
        dependency>
    dependencies>
dependencyManagement>

二、核心组件

我们使用feign最核心的是要构造一个FeignClient,里面包含了一系列的组件:Encoder、Decoder、Logger、Contract。

1、Encoder

Encoder编码器,当我们调用接口时,如果传递的参数是一个对象,Feign需要对这个对象进行encode编码,做JSON序列化;即:Encoder负责将Java对象转换为JSON字符串。

2、Decoder

Decoder解码器,当接口收到一个JSON对象后,Feign需要对这个对象进行decode解码,即:Decoder负责将JSON字符串转换成JavaBean对象。

3、Contract

一般来说Feign的@FeignClient注解需要和spring web mvc支持的@PathVariable、@RequestMapping、@RequestParam等注解结合起来使用,但是Feign本身是不支持Spring Web Mvc注解的,所以需要有一个契约组件(Contract),负责解释Spring MVC的注解,让Feign可以和Spring MVC注解结合起来使用。

4、Logger

Logger为打印Feign接口请求调用日志的日志组件,默认为Slf4jLogger。

5、默认组件

  1. Decoder:ResponseEntityDecoder
  2. Encoder:SpringEncoder
  3. Contract:SpringMvcContract
  4. Logger:Slf4jLogger

1)为什么默认是这些?

根据SpringBoot自动装配的特性,找到@FeignClient注解所在的jar包 --> spring-cloud-openfeign-core中的XxxAutoConfiguration类 或 XxxConfiguration类。

又上述这些组件都是被FeignClient所使用,找到FeignClientsConfiguration类;

<1> 默认的Eecoder:
【微服务十二】SpringCloud之OpenFeign的核心组件(Encoder、Decoder、Contract)_第1张图片

<2> 默认的Decoder:
【微服务十二】SpringCloud之OpenFeign的核心组件(Encoder、Decoder、Contract)_第2张图片

<3> 默认的Contract:
【微服务十二】SpringCloud之OpenFeign的核心组件(Encoder、Decoder、Contract)_第3张图片

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号