feign优化

1、开启feign日志

1)Feign 虽然提供了日志增强功能,但是默认是不显示任何日志的,不过开发者在调试阶段可以自己配置日志的级别:
       Feign 的日志级别如下:

		NONE:默认的,不显示任何日志;
		BASIC:仅记录请求方法、URL、响应状态码及执行时间;
		HEADERS:除了BASIC中定义的信息之外,还有请求和响应的头信息;
		FULL:除了HEADERS中定义的信息之外,还有请求和响应的正文及元数据。

在application.yml 文件中配置日日级别

    feign:
      client:
        config:
          default:
            loggerLevel: full #feign显示日志
    logging:
      level:
        com.bjpowernode.feign: debug #log4j的日志级别

2、GZIP压缩

1)当 Gzip 压缩到一个纯文本文件时,效果是非常明显的,大约可以减少 70% 以上的文件大小:

网络数据经过压缩后实际上降低了网络传输的字节数,最明显的好处就是可以加快网页加载的速度。网页加载速度加快的好处不言而喻,除了节省流量,改善用户的浏览体验外,另一个潜在的好处是 gzip 与搜索引擎的抓取工具有着更好的关系。例如 Google 就可以通过直接读取 gzip 文件来比普通手工抓取 更快地检索网页。

2)Feign 开启 GZIP在application.yml 配置:
    server:
      compression:
        enabled: true #开启浏览器<----->consumer的gzip压缩
    feign:
      compression:
        request:
          enabled: true #开启feign<---->provider的gzip压缩
        response:
          enabled: true
3)效果:

上述操作完成后重启项目发起请求,观察控制台

3、Http 连接池

两台服务器建立HTTP连接的过程涉及到多个数据包的交换,很消耗时间。采用HTTP连接池可以节约大量的时间提示吞吐量

1)添加依赖
        <!--Http 连接池-->
        <dependency>
            <groupId>io.github.openfeign</groupId>
            <artifactId>feign-httpclient</artifactId>
        </dependency>
2)配置文件中开启
feign:
  # 开启 httpclient
  httpclient:
    enabled: true
3)验证.

在feign.SynchronousMethodHandler#executeAndDecode()这个方法中可以清楚的看出调用哪个 client
在未替换 httpclient 之前,是这样的:

在替换 httpclient 后,是这样的:

4、feign超时

修改feign_privider:

@Service
public class UserServiceImpl implements UserService {

	@Override
	public User getUser() {
        //模拟网络延迟
		try {
			Thread.sleep(2000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		return new User(1,"王粪堆",18);
	}
}

测试

报错求了! 看上面我红线框起来的信息。 Read timed out。超时了。
为什么会这样呢?按理来说,浏览器应该会转圈等待3s然后返回正确的信息,但这里怎么会报错呢?
Feign默认超时时间是1S
哦豁,那怎么办呢? 假如现在有一个服务,我们知道它的处理过程很复杂,要2S中才能返回结果,那该怎么办呢?
为了避免这样的情况,我们可以手动的设置OpenFeign的超时时间。

设置feign超时时间

1)feign超时调优方式一
ribbon:
	ConnectTimeout: 5000 #请求连接的超时时间
	ReadTimeout: 5000 #请求处理的超时时间
2)feign超时调优方式二
feign:
	client:
		config:
		  feign-provider:
    		ConnectionTimeout: 5000 #请求连接的超时时间
 		   	ReadTimeout: 5000 #请求处理的超时时间

注意:在配置了日志增强的情况下不会出现Read timed out异常!!

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Feign是一个用于声明式Web服务客户端的工具,它简化了与远程服务的交互。以下是一些Feign的最佳实践: 1. 定义API接口:在使用Feign之前,首先需要定义一个接口来描述远程服务的API。这个接口可以使用注解来描述请求方法、URL路径、请求参数等信息。 2. 添加Feign依赖:在项目的构建文件中添加Feign的依赖,例如在Maven项目中,可以将以下依赖添加到pom.xml文件中: ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> ``` 3. 配置Feign客户端:在应用程序的配置文件中,可以配置Feign客户端的基本信息,例如远程服务的URL、连接超时时间等。 4. 使用Feign客户端:通过注入Feign客户端的接口实例,可以直接调用远程服务的方法。Feign会自动处理请求的转发、负载均衡等操作。 5. 处理错误和超时:在使用Feign时,需要考虑网络错误和超时问题。可以为Feign客户端设置错误处理器和超时时间,以便在出现错误或超时时进行相应的处理。 6. 配置日志输出:为了方便调试和排查问题,可以配置Feign客户端输出详细的日志信息。可以通过调整日志级别和配置日志输出格式等方式进行配置。 7. 优化性能:使用Feign时,可以考虑一些性能优化的策略。例如,可以使用连接池来管理与远程服务的连接,减少连接的建立和关闭开销。 这些是使用Feign的一些最佳实践,希望对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值