Spring Cloud Feign

Feign是什么

降低远程调用的复杂度
Feign 是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求,而不用像Java中通过封装HTTP请求报文的方式直接调用。
省去自己获取url、参数类型等,通过SpringMvc注解获取UserController的请求方式、路径、参数、返回结果等

使用Feign之前Controller调用其他业务

public String queryById(@PathVariable("id") Integer id) {
        String url = "http://user-service/user/"+id;
        String user = template.getForObject(url, String.class);
        return user;
    }

使用Feign案例

导入依赖

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

添加注解
启动类加 @EnableFeignClients注解

	@EnableFeignClients
    @SpringCloudApplication //==@EnableCircuitBreaker、@EnableDiscoveryClient、@SpringBootApplication
    public class ConsumerApplication {


        /*@Bean
          @LoadBalanced
          public RestTemplate restTemplate(){
            return new RestTemplate();      使用Feign后不在需要该步骤
          }*/ //
        public static void main(String[] args) {
            SpringApplication.run(ConsumerApplication.class);
        }
    }

编写UserClient接口

@FeignClient("user-service") //获取服务名,从eureka拉取该服务的服务列表,底层会利用ribbon实现负载均衡,在通过 @GetMapping  @PathVariable获取地址并传递id发起请求
public interface UserClient {
     @GetMapping("user/{id}")
     User queryById(@PathVariable("id") Integer id);
    }

修改Controller类

@RestController
    @RequestMapping("consumer")
    //@DefaultProperties(defaultFallback = "queryByIdFallback") Feign中包含hystrix,所以...
    public class ConsumerController {


    /* @Autowired
        private RestTemplate template; 使用Feign后不在需要该步骤 */

    @Autowired
    private UserClient client;
    @GetMapping("{id}")
    public User queryById(@PathVariable("id") Integer id) {
        return client.queryById(id);
    }

    public String queryByIdFallback() {
        return "服务器正忙,请稍后再试!";
        }
    }

定义一个类实现UserClient接口,作为fallback的处理类

	@Component
    public class UserClientFailBack implements UserClient {
    @Override
    public User queryById(Integer id) {
        User user = new User();
        user.setUsername("查无此人!");
        return user;
        }
    }

Feign中的ribbon(负载均衡),在yml中配置

ribbon:
  ConnectionTimeOut: 500 # 建立连接的超时时长,默认1秒
  ReadTimeOut: 2000 # 读取数据超时时长,默认1

Feign中的hystrix(熔断),在yml中配置

# feign的 hystrix启动,
feign:
  hystrix:
    enabled: true

因为Feign中包含了ribbon和hystrix所以 pom.xml中只需导入Feign即可,但是启动ConsurmerApplicatiom会出现java.lang.NoClassDefFoundError: com/netflix/hystrix/contrib/javanica/aop/aspectj/HystrixCommandAspect 所以hystrix的依赖还需要单独引入
在这里插入图片描述

测试
UserApplication服务开启
ConsumerApplication请求UserApplication结果正常
在这里插入图片描述
在这里插入图片描述
UserApplication服务关闭
ConsumerApplication请求UserApplication结果异常
在这里插入图片描述
在这里插入图片描述
Feign的请求压缩
Spring Cloud Feign支持对请求和响应进行GZIP压缩,以减少通信过程中的损耗。

feign:
  compression:
    request:
      enable: true #开启请求压缩
    response:
      enable: true #开启响应压缩
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值