Feign远程调用

1、简介

Feign是Netflix开发的⼀个轻量级RESTful的HTTP服务客户端(⽤它来发起请求, 远程调⽤的),是以Java接⼝注解的⽅式调⽤Http请求,⽽不⽤像Java中通过封装 HTTP请求报⽂的⽅式直接调⽤,Feign被⼴泛应⽤在Spring Cloud 的解决⽅案中。

类似于Dubbo,服务消费者拿到服务提供者的接⼝,然后像调⽤本地接⼝⽅法⼀样 去调⽤,实际发出的是远程的请求

Feign可帮助我们更加便捷,优雅的调⽤HTTP API:不需要我们去拼接url然后 呢调⽤restTemplate的api,在SpringCloud中,使⽤Feign⾮常简单,创建⼀个 接⼝(在消费者--服务调⽤⽅这⼀端),并在接⼝上添加⼀些注解,代码就完成 了

SpringCloud对Feign进⾏了增强,使Feign⽀持了SpringMVC注解 (OpenFeign)

本质:封装了Http调⽤流程,更符合⾯向接⼝化的编程习惯,类似于Dubbo的服务 调⽤

2、配置

【1】:maven依赖

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

【2】:启动类使⽤注解@EnableFeignClients添加 Feign⽀持

        

【3】:创建Feign接⼝

package com.cc.gateway.feign;

import com.cc.common.dto.UserDto;
import com.cc.common.vo.ReturnVo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * @author cc
 * @data 2021年06月30日 18:01
 */
// "project-oauth" 服务名称
@FeignClient(name = "project-oauth", fallback = OauthFallback.class)
public interface OauthFeign {

    /**
     * token验证
     * @author cc
     * @date 2021/6/30 22:59
     * @param dto
     * @return com.cc.common.vo.ReturnVo
     */
    // "/oauth/checkToken" 调用路径
    @RequestMapping("/oauth/checkToken")
    public ReturnVo<Boolean> checkToken(@RequestBody UserDto dto);
}

3、负载均衡

Feign 本身已经集成了Ribbon依赖和⾃动配置,因此我们不需要额外引⼊依赖,可 以通过 ribbon.xx 来进 ⾏全局配置,也可以通过服务名.ribbon.xx 来对指定服务进⾏ 细节配置配置

ribbon:
  #请求连接超时时间
  ConnectTimeout: 3000
  #请求处理超时时间
  ReadTimeout: 15000
  #对所有操作都进⾏重试
  OkToRetryOnAllOperations: false
  ####根据如上配置,当访问到故障请求的时候,它会再尝试访问⼀次当前实例(次数由MaxAutoRetries配置),
  ####如果不⾏,就换⼀个实例进⾏访问,如果还不⾏,再换⼀次实例访问(更换次数由MaxAutoRetriesNextServer配置),
  ####如果依然不⾏,返回失败信息。
  MaxAutoRetries: 0 #对当前选中实例重试次数,不包括第⼀次调⽤
  MaxAutoRetriesNextServer: 0 #切换实例的重试次数
  NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule #负载策略调整

4、熔断器的支持

【1】:在Feign客户端⼯程配置⽂件(application.yml)中开启Feign对熔断器的⽀持

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

Hystrix超时设置

hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            ##########################################Hystrix的超时时⻓设置
            timeoutInMilliseconds: 15000

注意:

开启Hystrix之后,Feign中的⽅法都会被进⾏⼀个管理了,⼀旦出现问题就进⼊ 对应的回退逻辑处理

针对超时这⼀点,当前有两个超时时间设置(Feign/hystrix),熔断的时候是根 据这两个时间的最⼩值来进⾏的,即处理时⻓超过最短的那个超时时间了就熔断进 ⼊回退降级逻辑

⾃定义FallBack处理类

package com.cc.gateway.feign;

import com.cc.common.dto.UserDto;
import com.cc.common.utils.ReturnVoUtil;
import com.cc.common.vo.ReturnVo;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestBody;

/**
 * @author cc
 * @data 2021年06月30日 18:02
 */
@Component
public class OauthFallback implements OauthFeign {
    @Override
    public ReturnVo<Boolean> checkToken(@RequestBody UserDto dto) {
        return ReturnVoUtil.success("请重新登录", false);
    }
}

5、Feign对请求压缩和响应压缩的⽀持

Feign ⽀持对请求和响应进⾏GZIP压缩,以减少通信过程中的性能损耗。通过下⾯ 的参数 即可开启请求与响应的压缩功能:

feign:
 compression:
  request:
   enabled: true # 开启请求压缩
   mime-types: text/html,application/xml,application/json # 设置压缩的数据类型,此处也是默认值
   min-request-size: 2048 # 设置触发压缩的⼤⼩下限,此处也是默认值
  response:
   enabled: true # 开启响应压缩

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cc_南柯一梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值