• Spring Cloud OpenFeign - - - > 契约配置


    项目源代码:https://download.csdn.net/download/weixin_42950079/87177425



    Feign 是 Netflix 公司开发的声明式 HTTP 客户端,能够帮助我们更加便捷、优雅的调用 HTTP API。并且 Feign 内置了 Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务。

    • Feign 有一套自己的注解,想要使用 Feign 是需要学习这一套注解 ( 如:@RequestMapping --> @RequestLine@Pathvairable --> @Param)。

    • Spring Cloud 1 早期版本就是用的原生Fegin. 随着netflix的停更替换成了Open feign


    契约配置

    前面讲了一大堆,还想都还是没有讲到什么是契约配置,契约配置有什么作用?

    根据前面的概念描述,我们知道了 Spring Cloud 的早期版本使用的就是 Feign。所以有些公司开发使用的就是早期的 Spring Cloud,而在后期公司想进行版本升级的时候,改成使用Spring Cloud OpenFeign,但 Feign 使用的是他自己独有的那一套注解,如果我们想全部进行修改成 Spring MVC注解的话,就会非常麻烦!那么有没有办法,让我们升级版本又不需要改动太多代码呢?

    • Spring Cloud 在 Feign 的基础上做了扩展,可以使用 Spring MVC 的注解来完成Feign的功能。原生的 Feign 是不支持 Spring MVC 注解的,如果你想在 Spring Cloud 中使用原生的注解方式来定义客户端也是可以的,通过配置契约来改变这个配置,Spring Cloud 中默认的是 SpringMvcContract。

    也就是说:通过契约配置,我们可以在 OpenFeign 中使用 Feign 的注解,那么该如何配置呢?

    • 可以通过 java 的方式
    • 也可以通过 .yml 配置文件方式

    java方式 --> 修改契约配置
    import feign.Contract;
    import feign.Logger;
    import org.springframework.context.annotation.Bean;
    
    /**
     * 全局配置:加了@Configuration注解表示全局配置,对所有服务起作用
     * 局部配置:不加@Configuration注解表示局部配置,只针对指定的一个服务起作用
     */
    
    
    public class OpenFeignConfig {
    
        // 日志配置
        @Bean
        public Logger.Level feignLoggerLevel(){
            return Logger.Level.FULL;
        }
    
    
        // 契约配置
        @Bean
        public Contract feignContract(){
            return new Contract.Default();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 在 OpenFeign 接口的@FeignClient注解中,通过configuration属性中指定 OpenFeign 的扩展配置类()
    import com.cd.order8010.config.OpenFeignConfig;
    import feign.RequestLine;
    import org.springframework.cloud.openfeign.FeignClient;
    
    /**
     * 添加 Feign 接口和方法:
     * * name:指定调用rest接口所对应的服务名
     * * path:指定调用rest接口所在的StockController指定的RequestMapping的路径,如果StockController上没有RequestMapping,则不指定path属性
     * * configuration:指定OpenFeign接口的扩展
     */
    //@FeignClient(name = "stock-service", path = "/stock", configuration = OpenFeignConfig.class) //OpenFeign写法
    @FeignClient(value = "stock-service", path = "/stock", configuration = OpenFeignConfig.class) //Feign写法
    public interface StockFeignService {
    
    
        // 声明要调用的rest接口对应的方法
        //@RequestMapping("/reduce")
        @RequestLine("GET /reduce")
        public String reduce();
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21


    .yml方式 --> 修改契约配置
    feign:
        client:
            config:
              stock-service:  # 这里用default就是全局配置。如果是写服务名称(如:stock-service),则是针对某个微服务的配置,即局部配置
                  contract: feign.Contract.Default # 设置成默认的契约(即将SpringMVC注解还原成feign原生注解)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    import com.cd.order8010.config.OpenFeignConfig;
    import feign.RequestLine;
    import org.springframework.cloud.openfeign.FeignClient;
    
    /**
     * 添加 Feign 接口和方法:
     * * name:指定调用rest接口所对应的服务名
     * * path:指定调用rest接口所在的StockController指定的RequestMapping的路径,如果StockController上没有RequestMapping,则不指定path属性
     * * configuration:指定OpenFeign接口的扩展
     */
    //@FeignClient(name = "stock-service", path = "/stock")
    @FeignClient(value = "stock-service", path = "/stock")
    public interface StockFeignService {
    
    
        // 声明要调用的rest接口对应的方法
        //@RequestMapping("/reduce")
        @RequestLine("GET /reduce")
        public String reduce();
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
  • 相关阅读:
    Nosql 数据库 -Redis 安装
    迅为RK3568开发板QT学习手册
    PostgreSQL基础入门
    Python 使用 Opencv 库调用摄像头
    spring boot 引入hive
    Mysql中获取所有表名以及表名带时间字符串使用BetweenAnd筛选区间范围
    mysql安装
    数字孪生园区场景中的坐标知识
    Linux系统下挂载windows share共享文件夹
    加速LakeHouse ACID Upsert的新写时复制方案
  • 原文地址:https://blog.csdn.net/weixin_42950079/article/details/128058408