Spring Cloud Feign 技术

一.简介和作用

Feign [feɪn] 译文 伪装。Feign是一个声明式WebService客户端.使用Feign能让编写WebService客户端更加简单,它的使用方法是定义一个接口,然后在上面添加注解。不再需要拼接URL,参数等操作。项目主页:https://github.com/OpenFeign/feign
作用:
(1)集成Ribbon的负载均衡功能
(2)集成了Hystrix的熔断器功能
(3)支持请求压缩
(4)大大简化了远程调用的代码,同时功能还增强啦
(5)Feign以更加优雅的方式编写远程调用代码,并简化重复代码

二.快速入门

1.实现步骤:
(1). 导入feign依赖
(2). 编写Feign客户端接口
(3). 消费者启动引导类开启Feign功能注解
(4) 访问接口测试

2.实现过程:
(1)导入依赖

在user-consumer中添加spring-cloud-starter-openfeign依赖

<!--配置feign-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

(2)创建Feign客户端

在user-consumer中创建com.itheima.feign.UserClient接口,代码如下:
在这里插入图片描述
解释:

Feign会通过动态代理,帮我们生成实现类。
注解@FeignClient声明Feign的客户端,注解value指明服务名称
接口定义的方法,采用SpringMVC的注解。Feign会根据注解帮我们生成URL地址
注解@RequestMapping中的/user,不要忘记。因为Feign需要拼接可访问地址

(3)编写控制层

在user-consumer中创建com.itheima.controller.ConsumerFeignController,在Controller中使用@Autowired注入FeignClient,代码如下:

@RestController
@RequestMapping(value = "/feign")
public class ConsumerFeignController {

    @Autowired
    private UserClient userClient;

    /****
     * 使用Feign调用user-provider的方法
     */
    @RequestMapping(value = "/{id}")
    public User queryById(@PathVariable(value = "id")Integer id){
        return userClient.findById(id);
    }
}

(4)开启Feign

修改user-consumer的启动类,在启动类上添加@EnableFeignClients注解,开启Feign,代码如下:
在这里插入图片描述
(5)测试

请求http://localhost:18082/feign/2

三.集成负载均衡

Feign自身已经集成了Ribbon,因此使用Feign的时候,不需要额外引入依赖。
Feign内置的ribbon默认设置了请求超时时长,默认是1000,可以修改
ribbon内部有重试机制,一旦超时,会自动重新发起请求。如果不希望重试可以关闭配置:

#修改服务地址轮询策略,默认是轮询,配置之后变随机
user-provider:
  ribbon:
    #轮询
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule
    ConnectTimeout: 10000 # 连接超时时间
    ReadTimeout: 2000 # 数据读取超时时间
    MaxAutoRetries: 1 # 最大重试次数(第一个服务)
    MaxAutoRetriesNextServer: 0 # 最大重试下一个服务次数(集群的情况才会用到)
    OkToRetryOnAllOperations: false # 无论是请求超时或者socket read timeout都进行重试

四.熔断器支持

feign整合Hystrix熔断器
Feign默认也有对Hystrix的集成!
实现步骤:

  1. 在配置文件application.yml中开启feign熔断器支持
  2. 编写FallBack处理类,实现FeignClient客户端
  3. 在@FeignClient注解中,指定FallBack处理类。
  4. 测试

(1)开启Hystrix

在配置文件application.yml中开启feign熔断器支持:默认关闭

feign:
  hystrix:
    enabled: true # 开启Feign的熔断功能

(2)熔断降级类创建

修改user-consumer,创建一个类com.itheima.feign.fallback.UserClientFallback,实现刚才编写的UserClient,作为FallBack的处理类,代码如下:

@Component

public class UserClientFallback implements UserClient{

    /***
     * 服务降级处理方法
     * @param id
     * @return
     */
    @Override
    public User findById(Integer id) {
        User user = new User();
        user.setUsername("Fallback,服务降级。。。");
        return user;
    }
}

(3)指定Fallback处理类

在@FeignClient注解中,指定FallBack处理类
在这里插入图片描述
(4)测试

关闭服务消费方,请求http://localhost:18082/feign/2

五.请求压缩
SpringCloudFeign支持对请求和响应进行GZIP压缩,以减少通信过程中的性能损耗。

通过配置开启请求与响应的压缩功能:

feign:
	compression:
        request:
            enabled: true # 开启请求压缩
        response:
            enabled: true # 开启响应压缩
#也可以对请求的数据类型,以及触发压缩的大小下限进行设置

  #Feign配置
feign:
	compression:
		request:
			enabled: true # 开启请求压缩
			mime-types:	text/html,application/xml,application/json # 设置压缩的数据类型
			min-request-size: 2048 # 设置触发压缩的大小下限
			#以上数据类型,压缩大小下限均为默认值

六.Feign的日志级别配置

通过loggin.level.xx=debug来设置日志级别。然而这个对Feign客户端不会产生效果。因为@FeignClient注解修饰的客户端在被代理时,都会创建一个新的Feign.Logger实例。我们需要额外通过配置类的方式指定这个日志的级别才可以。

实现步骤:

  1. 在application.yml配置文件中开启日志级别配置
  2. 编写配置类,定义日志级别bean。
  3. 在接口的@FeignClient中指定配置类
  4. 重启项目,测试访问

实现过程:

(1)普通日志等级配置

在user-consumer的配置文件中设置com.itnzt包下的日志级别都为debug

#com.itnzt包下的日志级别都为Debug
logging:
  level:
    com.itnzt: debug

(2)Feign日志等级配置

在user-consumer中创建com.itheima.feign.util.FeignConfig,定义日志级别

@Configuration
public class FeignConfig {

    /***
     * 日志级别
     * @return
     */
    @Bean
    public Logger.Level feignLoggerLevel(){
        return Logger.Level.FULL;
    }
}

日志级别说明:

Feign支持4中级别:
NONE:不记录任何日志,默认值
BASIC:仅记录请求的方法,URL以及响应状态码和执行时间
HEADERS:在BASIC基础上,额外记录了请求和响应的头信息
FULL:记录所有请求和响应的明细,包括头信息、请求体、元数据
(3)指定配置类

修改user-consumer的com.itheima.feign.UserClient指定上面的配置类,代码如下:
在这里插入图片描述
重启项目,即可看到每次访问的日志
在这里插入图片描述
七. 小结
Feign的作用:不再使用拼接URL的方式实现远程调用,以接口调用的方式实现远程调用,简化了远程调用的实现方式,增强了远程调用的功能,例如:增加了负载均衡、熔断、压缩、日志启用。

掌握Feign的使用过程

properties
1.引入Feign依赖包
2.创建Feign接口,feign接口中需要指定调用的服务名字
3.使用@EnabledFeignClients启用Feign功能
掌握Feign的负载均衡配置
properties
在配置文件中配置
{spring.application.name} : ribbon :负载均衡属性配置
掌握Feign的熔断配置
properties
1.在application.yml中开启Hystrix
2.给Feign接口创建一个实现类
3.给Feign指定fallback类
掌握Feign的压缩配置
properties
在application.yml中指定压缩属性即可
掌握Feign的日志配置
properties
1.在application.yml中开启普通日志等级
2.创建一个类,定义Feign日志等级
3.在Feign接口中指定定义日志的配置

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值