spring-cloud之openfeign学习

OpenFeign简介

OpenFeign是SpringCloud提供的声明式的REST客户端,实现远程的服务的调用,只需要编写接口和SpringMVC的注解就能完成调用。

Feign = RestTemplate + Ribbon + Hystrix

Feign的用法

1.引入依赖 openfeign

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

2.在启动类上加 @EnableFeignClients("Feign接口所在的包名")。

3.编写Feign接口,在接口上加@FeignClient("被调用的服务名")。

4.在Feign接口中编写方法(对应提供者的方法),方法可以使用SpringMVC的注解。

5.注入接口对象,通过方法实现远程调用。

Feign整合Ribbon

Feign默认整合了Ribbon实现负载均衡

全局配置

ribbon.属性 = 值

指定服务配置

服务名称.ribbon.属性 = 值

Ribbon常用配置:

1.ConnectionTimeout 连接超时

2.ReadTimeout 读取超时

3.OkToRetryOnAllOperations 对所有操作启动重试机制 true/false

4.MaxAutoRetries 最大重试次数

5.MaxAutoRetriesNextServer 最大重试下个服务器次数

Feign整合Hystrix

Feign默认整合了Hystrix的熔断机制,Feign可以单独定义类,编写降级方法.

实现:

1.在配置文件里面设置启动Hystrix特性

feign.hystrix.enabled=true

2.定义降级处理类,继承对应的FeignClient接口

3.实现接口中的方法,所有方法均为回退方法

4.在FeignClient注解中配置降级方法处理类

@FeignClient(value = "product-service",fallback = ProductFeignClientFallback.class)

Feign的优化配置

优化连接池

Feign是基于HTTP协议,HTTP协议基于TCP协议,TCP具有三次握手四次挥手机制,频繁的创建连接比较消耗系统的资源和时间,降低系统的吞吐量。

使用连接池可以减少网络连接的创建,提高连接的使用效率,提高系统吞吐量。

Feign默认使用JDK自带的HttpURLConnection,没有连接池。可以使用HttpClient或OKHTTP

使用步骤:

1)导入httpclient、feign-httpclient依赖

2)feign.httpclient.enable = true

请求压缩优化

Feign可以对网络数据进行GZIP压缩,减少网络流量,提高速度。

#启动请求压缩 
feign.compression.request.enabled=true 
#启动响应压缩 
feign.compression.response.enabled=true 
#设置请求压缩的多媒体类型 
feign.compression.request.mime-types=text/html,application/xml,application/json 
#设置请求压缩的下限 (默认2048)
feign.compression.request.min-request-size=1024 

使用日志对连接过程进行监控

步骤:

1.在配置文件里面开启debug日志

logging.level.包名.FeignClient接口名 = DEBUG

2.定义配置类,配置日志

/** Feign日志配置  */ 
@Configuration 
public class FeignLoggerConfig {      
    /**  返回日志类型,NONE没有日志,BASIC基本信息(请求方法,URL,响应代码等),HEADERS(头部信息),FULL(基本+头部)*/     
    @Bean     
    public Logger.Level level(){         
    	return Logger.Level.BASIC;     
    } 
} 

超时优化

Ribbon是具有重试机制的,就是连接失败后进行重连,问题是:Hystrix的超时时间默认是小于Ribbon的超时,Hystrix会提前熔断,Ribbon无法进行重试。

Hystrix的超时要大于Ribbon的超时

Ribbon是具有重试机制的,就是连接失败后进行重连,问题是:Hystrix的超时时间默认是小于Ribbon的超时,Hystrix会提前熔断,Ribbon无法进行重试

Hystrix的超时要大于Ribbon的超时

Feign的基本原理

问题:为什么只需要编写接口就能实现网络通信?

通过动态代理机制完成

1.在启动类上加@EnableFeignClients注解后,对feign客户端接口的包进行扫描。

2.如果扫描到带@FeignClient注解的接口,就会将接口信息(服务名、方法定义)保存到IOC容器中。

3.IOC容器使用动态代理机制创建实现类,包装到RequestTemplate对象中。

4.RequestTemplate进行网络连接时会将请求交给LoadBalanceClient处理,进行负载均衡的调用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值