暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

玩转Spring Cloud Feign自定义

燕山雷震子 2021-07-07
1495

    feign作为springcloud的http交互工具,让我们实现完全傻瓜化的接口调用,关于feign的调用操作,因其太过简单,在此我们不做赘表,让我们直接玩一些高级些的自定义处理:


日志配置


feign的logger.class中源码里对日志的等级分为4钟:

NONE:不输出日志

BASIC:只输出请求方法的url和响应的状态码以及接口执行的时间

HEADERS:将basic信息和请求头信息输出

FULL:输出完整的请求信息


feign的自定义需要创建一个配置类:

在项目启动时通过配置,将配置类链入feignclient属性中:


配置类搞完之后,就需要在feign clien中加入配置

@FeignClient(

    value = "xxx-xxx-xx-service", 

    configuration = FeignConfiguration. class)
public interface UserRemoteClient {

    //todo
}


在配置文件中执行 Client 的日志级别:

格式是“logging.level.client 类地址=级别”

logging.level.com.leizhenzi.feign_demo.remote.UserRemoteClient=DEBUG



认证配置



在实际使用中时,接口间的调用是需要权限控制的,有些场景可以使用参数中传递,但是更多的是在请求头中传递认证相关的信息,让我们来看一下feign如何实现认证配置:

然后将具体的认证逻辑添加在apply方法中即可实现请求进入时完成认证相关的处理;


设置超时



    通过 Options 可以配置连接超时时间和读取超时时间(代码如下所示),Options 的第一个参数是连接超时时间(ms),默认值是 10×1000;第二个是取超时时间(ms),默认值是 60×1000;


@Configuration
public class FeignConfiguration {
    @Beanpublic 
    Request.Options options() {
        return new Request.Options(5000, 10000);
    }
}
复制

客户端组建配置



    Feign 中默认使用 JDK 原生的 URLConnection 发送 HTTP 请求,我们可以集成别的组件来替换掉 URLConnection,比如 Apache HttpClient,OkHttp。配OkHttp 只需要加入 OkHttp 的依赖,代码如下所示:

<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-okhttp</artifactId>
</dependency>

然后修改配置,将 Feign 的 HttpClient 禁用,启用 OkHttp,配置如下:

#feign 使用 okhttp
feign.httpclient.enabled=false
feign.okhttp.enabled=true

在feign的源码里可以发现我们的配置是如何生效的,即通过@ConditionalClass标识当apachehttpclient.class在当前路径下存在时,如果@ConditionalOnProperty监测到配置文件中feign.httpclient.enabled属性为true时,执行加载该配置,同理我们可以使用同样方式配置okhttp:


用配置方式自定义feign



# 链接超时时间
feign.client.config.feignName.connectTimeout=5000
# 读取超时时间
feign.client.config.feignName.readTimeout=5000
# 日志等级
feign.client.config.feignName.loggerLevel=full
# 重试
feign.client.config.feignName.retryer=com.example.SimpleRetryer
# 拦截器
feign.client.config.feignName.requestInterceptors[0]=com.example.FooRequestInterceptor
feign.client.config.feignName.requestInterceptors[1]=com.example.BarRequestInterceptor
# 编码器
feign.client.config.feignName.encoder=com.example.SimpleEncoder
# 解码器
feign.client.config.feignName.decoder=com.example.SimpleDecoder
# 契约
feign.client.config.feignName.contract=com.example.SimpleContract


结语



    今天的分享就到这里,我是雷记,专注于分享关于开发编程相关的技术干货,如果今日的分享对您有帮助的话,还望不吝关注点赞,这对我很重要!如果各位在开发过程中遇到棘手问题,可以扫描下图二维码加入,和雷记与其他小伙伴一起探讨解决,让我们努力让每一个问题都得到解决!

    




       

           
更多推荐
           

ribbon的负载均衡策略

聊一聊spring cloud ribbon

聊一聊Nginx、Spring Cloud、Dubbo

聊一聊微服务与springcloud

关于uml类图使用与软件架构的一些想法

uml设计之类关系

UML的类图与关系

浅聊java编程建模之UML

java研发瑞士军刀系列之MyBatis(一)

java研发瑞士军刀系列之MyBatis(二)

java研发瑞士军刀系列之MyBatis(三)

java研发瑞士军刀系列之MyBatis(四)
       
文章转载自燕山雷震子,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论