美文网首页SpringCloud
SpringCloud实战四-Feign

SpringCloud实战四-Feign

作者: 坏男坏男 | 来源:发表于2020-05-28 15:44 被阅读0次

    什么是Feign

    之前文章的本地调用使用的是SpringBoot的RestTemplate进行调用, 存在可读性差,不够“优雅”等缺点。

    Feign是Netflix开源的声明式HTTP客户端,简化了HTTP Client的编写,下面简单的用代码解释一下什么是“声明式”。

    引入依赖:

    org.springframework.cloudspring-cloud-starter-openfeign

    在启动类添加注解:

    @EnableFeignClients

    创建一个接口:

    @FeignClient(name ="user-center")publicinterfaceUserCenterFeignClient{/**     * http://user-center/users/{id}*@paramid*@return    */@GetMapping("/users/{id}")UserDTO findById(@PathVariableInteger id);}

    调用:

    UserDTO userDTO =this.userCenterFeignClient.findById(userId);

    此时我们已经完成Feign的调用。“声明式”即在接口上写上注解便可以达到本地调用的目的。

    细粒度及全局配置

    Feign的配置和Ribbon的配置很像,均支持Java Config配置和属性文件的配置,以日志级别(默认没有打印日志,NONE)配置为例

    细粒度配置

    Java Config配置

    @FeignClient(name ="user-center", configuration = FeignConfiguration.class)publicinterfaceUserCenterFeignClient

    publicclassFeignConfiguration{@BeanpublicLogger.Levellevel(){// 让feign打印所有请求的细节returnLogger.Level.FULL;    }}

    b.属性文件配置

    feign:client:config:user-center:        loggerLevel: full

    2.全局配置

        a.Java Config配置

        启动文件加注解

    @EnableFeignClients(defaultConfiguration = GlobalFeignConfiguration.class)publicclassContentCenterApplication

    publicclassGlobalFeignConfiguration{@BeanpublicLogger.Levellevel(){// 让feign打印所有请求的细节returnLogger.Level.FULL;    }}

    b.属性文件

    feign:client:config:      # 全局配置default:        loggerLevel: full

    tips:Feign默认支持负载均衡

    Feign优化

    微服务的优化很多,这里只做一些小的优化:

    1.配置连接池(支持httpClients和okHttp,默认是URLConnection)

     2.修改日志级别(尽量不用FULL)

    配置连接池apache httpClients

    添加依赖:

    io.github.openfeignfeign-httpclient

    添加配置:

    feign:httpclient:    # 让feign使用apache httpclient做请求;而不是默认的urlconnectionenabled:true    # feign的最大连接数max-connections:200    # feign单个路径的最大连接数max-connections-per-route:50

    传参

    Feign与SpringMvc的传参类似,支持@PathVariable,@RequestBody等注解,可以在maven中添加一个模块,在需要的模块中引入,让controller实现Feign模块中的接口,便于维护。

    后续

    目前看来,微服务的调用基本完成,后续将介绍服务容错-Sentinel、消息驱动Spring Cloud Alibaba RocketMQ以及API网关-Spring Cloud Gateway。

    相关文章

      网友评论

        本文标题:SpringCloud实战四-Feign

        本文链接:https://www.haomeiwen.com/subject/oqdaahtx.html