Spring Cloud (5) —— Feign 调用 provider 和 负载均衡

关于 Feign

Feign是一个声明式的伪Http客户端,它使得 Http 客户端编码变得更简单。使用Feign,只需要创建一个接口并注解。它具有可插拔的注解特性,可使用Feign 注解和 JAX-RS 注解。Feign 支持可插拔的编码器和解码器。Feign 默认集成了 Ribbon,自然就实现了负载均衡的效果。

Feign 的使用

  1. 新建模块 spring-cloud.s04.store-feign
  2. pom
    中添加依赖

    <dependencies>
        <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
      </dependencies>
  3. 添加配置文件

    application.yml

    server:
      port: 31002
    spring:
      application:
        name: store-feign
    eureka:
      client:
        serviceUrl:
          defaultZone: http://user:123123@localhost:34001/eureka/
      instance:
        instance-id: ${spring.cloud.client.ip-address}:${server.port}/${spring.application.name}
        prefer-ip-address: true
        lease-renewal-interval-in-seconds: 10
        lease-expiration-duration-in-seconds: 30
  4. 创建启动类 ..StoreFeign

    @SpringBootApplication
    @EnableEurekaClient
    @EnableFeignClients
    public class StoreFeign {
      public static void main(String[] args) {
        SpringApplication.run(StoreFeign.class, args);
      }
    }
  5. 为了专注 Feign 的使用,将 Feign 的应用提取到 service 层,与 controller 层的注解分开。创建 接口
    ..StoreFeignService

    /*
    @FeignClient("") 参数填 Spring Cloud Provider 的应用名 ${spring.application.name}
     */
    @FeignClient("album-provider")
    public interface StoreFeignService {
      /*
      @RequestMapping() 默认参数是请求资源的地址,
      也可以指定请求的 Http Method @RequestMapping(value="/movie/movies",method=RequestMethod.GET)
    
      getMovies() 也可以算入参数,例如 getMovies(@RequestParam("name") String name) ,调用时比如传入的参数
       */
      @RequestMapping("/album/server-port")
      public String getProviderPort();
    }
  6. 创建访问入口 ..StoreFeignController

    @RestController
    @RequestMapping("/store-feign")
    public class StoreFeignController {
    
      @Autowired
      StoreFeignService storeFeignService;
    
      @RequestMapping("/album-provider-port")
      public String getProviderPort() {
        return storeFeignService.getProviderPort();
      }
    }
  7. 启动项目,访问 http://localhost:31002/store-feign/album-provider-port
    ,多次刷新,可以发现负载均衡策略是轮训。 Feign 就是使用 Ribbon 的负载均衡策略,当然改变负载均衡策略的方法就与 Ribbon 的方法相同。

压缩传输数据

原文 

https://segmentfault.com/a/1190000022163069

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » Spring Cloud (5) —— Feign 调用 provider 和 负载均衡

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址