5.SpringCloud入门进阶 - 常用组件Feign(负载均衡器):

上一章我们聊到了SpringCloud的一个负载均衡组件Ribbon,这一章我们来聊一下另一个负载均衡组件Feign

1.什么是Feign:

Frign也是一个负载均衡器,他与Ribbon相比更为强大。官方解释:

Feign是一个声明式的http客户端,使用Feign可以实现声明式REST调用,它的目的就是让Web Service调用更加简单。Feign整合了Ribbon和SpringMvc注解,这让Feign的客户端接口看起来就像一个Controller。Feign提供了HTTP请求的模板,通过编写简单的接口和插入注解,就可以定义好HTTP请求的参数、格式、地址等信息。而Feign则会完全代理HTTP请求,我们只需要像调用方法一样调用它就可以完成服务请求及相关处理。同时Feign整合了Hystrix,可以很容易的实现服务熔断和降级(关于Hystrix我们后面再讲)。

2.为什么要使用Feign:

我们上一章订单服务集成了Ribbon,在订单服务的Controller中调用的url里暴露出了其他服务的ip和端口,这个操作时非常危险的。那么我们就需要避免直接把ip和端口直接暴露到url上。如何操作?我们使用Feign来作为我们的负载均衡器

3.如何使用Feign:

我们学习Ribbon的时候使用Order服务集成了Ribbon,那么我们为了避免发生混淆,我们再创建一个支付服务,让支付服务集成feign

  1. 我们首先导入Feign的依赖
        
            org.springframework.cloud
            spring-cloud-starter-openfeign
        
  1. 将支付服务注册到服务中心
eureka:
  client:
    serviceUrl:
      defaultZone: http://peer1:1000/eureka/,http://peer2:1001/eureka/
  instance:
    prefer-ip-address: true
spring:
  application:
    name: pay-server
server:
  port: 4000
  1. 在主配置类上添加新的标签@EnableFeignClients(value = “cn.xiaomin.springcloud.feignclient”),这个标签的意思是开启Feign客户端,标签里的值是你Feign的客户端接口的包名
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients(value = "cn.xiaomin.springcloud.feignclient")
public class PayServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(PayServerApplication.class);
    }
}

5.SpringCloud入门进阶 - 常用组件Feign(负载均衡器):_第1张图片

  1. 创建用户服务的接口,这个接口首先需要打上FeignClient标签,这个标签上的值是你想要调用服务的服务名。接口中的方法和用户服务的controller里面的方法一一致。
@FeignClient("user-server")
public interface UserFeignClient {
    @RequestMapping("/user/{id}")
    public User getUserById(@PathVariable("id") Long id);
}
  1. 创建支付服务的controller:我们需要注入FeignClient接口,然后通过这个接口调用查询方法
@RestController
public class PayController {

    @Autowired
    private UserFeignClient userFeignClient;

    @RequestMapping("/pay/{id}")
    public User getById(@PathVariable("id") Long id){
        return userFeignClient.getUserById(id);
    }
}
  1. 测试,我们通过浏览器调用localhost:4000/pay/111,看一下能否出现json数据
    5.SpringCloud入门进阶 - 常用组件Feign(负载均衡器):_第2张图片

4. 总结:

我们总结一下Feign的工作原理,我们在主配置类添加@EnableFeignClient,该标签的值为你创建UserFeignClient接口的包名。那么也就是指定Feign的扫描包。我们再编写UserFeignClient接口,该接口打上@FeignClient注解,值为你想调用服务的服务名。也相当于这个接口被spring管理起来。当我们发起请求的时候,会使用jdk动态代理的方式代理该接口,Feign会为每一个方法生成RequestTemplant,里面封装了url,请求信息等。最终RequestTemplant会生成Request请求,然后会交给Http客户端,Http客户端再交给LoadBalaceClient,使用Ribbon的负载均衡的功能。因为Feign内部是集成了Ribbon的。

本章集成Feign的集成就结束了,下一章我们会聊聊SpringCloud的另一个核心组件Hystrix(熔断器),感谢大家的支持,如果有什么问题,欢迎大家指出!

你可能感兴趣的:(5.SpringCloud入门进阶 - 常用组件Feign(负载均衡器):)