SpringCloud入门1---简介

SpringCloud入门2---Eureka(服务发现组件)

SpringCloud入门3---Feign(服务调用组件)

SpringCloud入门4---Hystrix(熔断器组件)

SpringCloud入门5---Zuul(服务网关)

第三篇,我们对SpringCloud中Feign(服务发现组件)做一下简单的介绍:

1、Feign简介

        Feign 是一个声明式的 Web Service 客户端。它的出现使开发 Web Service 客户端变得很简单。使用 Feign 只需要创建一个接口加上对应的注解,比如:@FeignClient 注解。 Feign 有可插拔的注解,包括 Feign 注解和 AX-RS 注解。Feign 也支持编码器和解码器,Spring Cloud Open Feign 对 Feign 进行增强支持 Spring Mvc 注解,可以像 Spring Web 一样使用 HttpMessageConverters 等。

  Feign 是一种声明式、模板化的 HTTP 客户端。在 Spring Cloud 中使用 Feign,可以做到使用 HTTP 请求访问远程服务,就像调用本地方法一样的,开发者完全感知不到这是在调用远程方法,更感知不到在访问 HTTP 请求。接下来介绍一下 Feign 的特性,具体如下:

可插拔的注解支持,包括 Feign 注解和AX-RS注解。

  • 支持可插拔的 HTTP 编码器和解码器。
  • 支持 Hystrix 和它的 Fallback。
  • 支持 Ribbon 的负载均衡。
  • 支持 HTTP 请求和响应的压缩。Feign 是一个声明式的 WebService 客户端,它的目的就是让 Web Service 调用更加简单。它整合了 Ribbon 和 Hystrix,从而不需要开发者针对 Feign 对其进行整合。Feign 还提供了 HTTP 请求的模板,通过编写简单的接口和注解,就可以定义好 HTTP 请求的参数、格式、地址等信息。Feign 会完全代理 HTTP 的请求,在使用过程中我们只需要依赖注入 Bean,然后调用对应的方法传递参数即可。

 

2、feign调用集成 

  (1)在test_qa模块添加依赖

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

  (2)修改test_qa模块的启动类,添加注解

@EnableDiscoveryClient
@EnableFeignClients

  (3)在test_qa模块创建 com.test.qa.client包,包下创建接口 

@FeignClient("test‐base")
public interface LabelClient {
    @RequestMapping(value="/label/{id}", method = RequestMethod.GET)
    public Result findById(@PathVariable("id") String id);
}

@FeignClient注解用于指定从哪个服务中调用功能 ,注意 里面的名称与被调用的服务
名保持一致,并且不能包含下划线。
@RequestMapping注解用于对被调用的微服务进行地址映射。注意 @PathVariable注
解一定要指定参数名称,否则出错 

  (4)修改test_qa模块的 ProblemController

@Autowired
private LabelClient labelClient;

@RequestMapping(value = "/label/{labelid}")
    public Result findLabelById(@PathVariable String labelid){
       Result result = labelClient.findById(labelid);
       return result;
}

3、 feign负载均衡

  由于feign组件默认集成了ribbon(负载均衡组件),可以轻松实现负载均衡

  测试:同时开启两个基础微服务,看是否是轮流调用。

@RequestMapping(value="/{id}", method = RequestMethod.GET)
public Result findById(@PathVariable String id){
   System.out.println("1");
   return new Result(true,StatusCode.OK,"查询成功",labelService.findById(id) );
}
@RequestMapping(value="/{id}", method = RequestMethod.GET)
public Result findById(@PathVariable String id){
   System.out.println("2");
   return new Result(true,StatusCode.OK,"查询成功",labelService.findById(id) );
}

修改端口和输出信息,发现实现负载均衡。

以上就是feign的简单介绍,了解Dubbo的童鞋,其实就是Dubbo的RPC调用,并实现负载均衡,所以Dubbo大致其实就是相当于SpringCloud中的feign组件。

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐