Spring Cloud 之 Feign 简介及简单使用

简介: Spring Cloud 之 Feign 简介及简单使用

1. Feign 简介

  1. Feign是在RestTemplate基础上封装的,使用注解的方式来声明一组与服务提供者Rest接口所对应的本地Java API接口方法。
  2. Feign将远程Rest接口抽象成一个声明式的FeignClient(Java API)客户端,并且负责完成FeignClient客户端和服务提供方的Rest接口绑定。
  3. Feign 使用了动态代理,使用@FeignClient调用接口的本质就是调用Feign创建的动态代理,然后根据接口上的@RequestMapping等注解,来动态构造出要请求的服务的地址并对这个地址发起请求、解析响应。
  4. Feign具备可插拔的注解支持,包括Feign注解和JAX-RS注解。同时,对于Feign自身的一些主要组件,比如编码器和解码器等,也以可插拔的方式提供,在有需求时方便扩张和替换它们。
  5. 在 Spring Cloud 中使用 Feign,可以做到使用 HTTP 请求访问远程服务,就像调用本地方法一样的,开发者完全感知不到这是在调用远程方法,更感知不到在访问 HTTP 请求。接下来介绍一下 Feign 的特性,具体如下:
  6. 可插拔的注解支持,包括 Feign 注解和AX-RS注解。
  7. 支持可插拔的 HTTP 编码器和解码器。
  8. 支持 Hystrix 和它的 Fallback。
  9. 支持 Ribbon 的负载均衡。
  10. 支持 HTTP 请求和响应的压缩。

6.它整合了 Ribbon 和 Hystrix,从而不需要开发者针对 Feign 对其进行整合。Feign 还提供了 HTTP 请求的模板,通过编写简单的接口和注解,就可以定义好 HTTP 请求的参数、格式、地址等信息。Feign 会完全代理 HTTP 的请求,在使用过程中我们只需要依赖注入 Bean,然后调用对应的方法传递参数即可。


2. 使用步骤

  1. 使用Feign的第1步是在项目的pom.xml文件中添加Feign依赖:
<!--添加Feign依赖--> 
<dependency> 
  <groupId>org.springframework.cloud</groupId> 
  <artifactId>spring-cloud-starter-openfeign</artifactId> 
</dependency> 


使用Feign的第2步是在主函数的类上添加@EnableFeignClient,在客户端启动Feign:

package com.crazymaker.springcloud.user.info.start; 
... 
//启动Feign 
@EnableFeignClients(basePackages = { "com.crazymaker.springcloud.seckill.remote.client"},                       defaultConfiguration = {TokenFeignConfiguration.class} ) 
public class UserCloudApplication { 
  public static void main(String[] args) { 
      SpringApplication.run(UserCloudApplication.class, args); 
   } 
} 


3.使用Feign的第3步是编写声明式接口。这一步将远程服务抽象成一个声明式的FeignClient客户端,示例如下:

package com.crazymaker.springcloud.seckill.remote.client; 
... 
/** 
*@description:远程服务的本地声明式接口 
*/ 
@FeignClient(value = "seckill-provider", path = "/api/demo/") 
public interface DemoClient { 
  /** 
   *测试远程调用 
   *@return hello 
   */ 
  @GetMapping("/hello/v1") 
  Result<JSONObject> hello(); 
  /** 
   *非常简单的一个回显接口,主要用于远程调用 
   *@return echo回显消息 
   */     
  @RequestMapping(value = "/echo/{word}/v1", method = RequestMethod.GET) 
  Result<JSONObject> echo( @PathVariable(value = "word") String word); 
} 


  1. 在上面接口的@FeignClient注解配置中,使用value指定了需要绑定的服务,使用path指定了接口的URL前缀。然后使用@GetMapping和@RequestMapping两个方法级别的注解分别声明了两个远程调用接口。
  2. 使用Feign的第4步是调用声明式接口。
package com.crazymaker.springcloud.user.info.controller; 
... 
@Api(value = "基础学习DEMO", tags = {"基础学习DEMO"}) 
@RestController 
@RequestMapping("/api/demo") 
public class DemoController { 
  //注入 @FeignClient注解所配置的客户端实例 
  @Resource 
  DemoClient demoClient; 
  @GetMapping("/say/hello/v1") 
  @ApiOperation(value = "Feign远程调用") 
  public Result<JSONObject> hello() { 
      Result<JSONObject> result = demoClient.hello(); 
      JSONObject data = new JSONObject(); 
      data.put("remote", result); 
      return Result.success(data).setMsg("操作成功"); 
  } 
} 



目录
相关文章
|
1月前
|
监控 负载均衡 Java
深入理解Spring Cloud中的服务网关
深入理解Spring Cloud中的服务网关
|
1月前
|
Java 开发工具 git
实现基于Spring Cloud的配置中心
实现基于Spring Cloud的配置中心
|
1月前
|
设计模式 监控 Java
解析Spring Cloud中的断路器模式原理
解析Spring Cloud中的断路器模式原理
|
23天前
|
负载均衡 Java Spring
Spring cloud gateway 如何在路由时进行负载均衡
Spring cloud gateway 如何在路由时进行负载均衡
156 15
|
30天前
|
资源调度 Java 调度
Spring Cloud Alibaba 集成分布式定时任务调度功能
Spring Cloud Alibaba 发布了 Scheduling 任务调度模块 [#3732]提供了一套开源、轻量级、高可用的定时任务解决方案,帮助您快速开发微服务体系下的分布式定时任务。
14240 19
|
23天前
|
Java Spring
spring cloud gateway在使用 zookeeper 注册中心时,配置https 进行服务转发
spring cloud gateway在使用 zookeeper 注册中心时,配置https 进行服务转发
43 3
|
1月前
|
消息中间件 Java 开发者
Spring Cloud微服务框架:构建高可用、分布式系统的现代架构
Spring Cloud是一个开源的微服务框架,旨在帮助开发者快速构建在分布式系统环境中运行的服务。它提供了一系列工具,用于在分布式系统中配置、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态等领域的支持。
120 5
|
1月前
|
Java API 开发工具
Spring Boot与Spring Cloud Config的集成
Spring Boot与Spring Cloud Config的集成
|
1月前
|
存储 安全 Java
实现基于Spring Cloud的分布式配置管理
实现基于Spring Cloud的分布式配置管理