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("操作成功"); 
  } 
} 



目录
相关文章
|
16天前
|
消息中间件 监控 Java
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
31 6
|
16天前
|
Java 关系型数据库 MySQL
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
36 5
|
16天前
|
缓存 监控 Java
如何将Spring Boot应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot应用程序部署到Pivotal Cloud Foundry (PCF)
27 5
|
2月前
|
JSON Java 数据格式
【微服务】SpringCloud之Feign远程调用
本文介绍了使用Feign作为HTTP客户端替代RestTemplate进行远程调用的优势及具体使用方法。Feign通过声明式接口简化了HTTP请求的发送,提高了代码的可读性和维护性。文章详细描述了Feign的搭建步骤,包括引入依赖、添加注解、编写FeignClient接口和调用代码,并提供了自定义配置的示例,如修改日志级别等。
114 1
|
1月前
|
JavaScript NoSQL Java
CC-ADMIN后台简介一个基于 Spring Boot 2.1.3 、SpringBootMybatis plus、JWT、Shiro、Redis、Vue quasar 的前后端分离的后台管理系统
CC-ADMIN后台简介一个基于 Spring Boot 2.1.3 、SpringBootMybatis plus、JWT、Shiro、Redis、Vue quasar 的前后端分离的后台管理系统
42 0
|
3月前
|
负载均衡 Java Nacos
SpringCloud基础2——Nacos配置、Feign、Gateway
nacos配置管理、Feign远程调用、Gateway服务网关
SpringCloud基础2——Nacos配置、Feign、Gateway
|
3月前
|
XML 监控 Java
Spring Cloud全解析:熔断之Hystrix简介
Hystrix 是由 Netflix 开源的延迟和容错库,用于提高分布式系统的弹性。它通过断路器模式、资源隔离、服务降级及限流等机制防止服务雪崩。Hystrix 基于命令模式,通过 `HystrixCommand` 封装对外部依赖的调用逻辑。断路器能在依赖服务故障时快速返回备选响应,避免长时间等待。此外,Hystrix 还提供了监控功能,能够实时监控运行指标和配置变化。依赖管理方面,可通过 `@EnableHystrix` 启用 Hystrix 支持,并配置全局或局部的降级策略。结合 Feign 可实现客户端的服务降级。
191 23
|
3月前
|
前端开发 API 微服务
SpringCloud微服务之间使用Feign调用不通情况举例
SpringCloud微服务之间使用Feign调用不通情况举例
654 2
|
3月前
|
Java API 开发者
【已解决】Spring Cloud Feign 上传文件,提示:the request was rejected because no multipart boundary was found的问题
【已解决】Spring Cloud Feign 上传文件,提示:the request was rejected because no multipart boundary was found的问题
649 0
|
5月前
|
负载均衡 Java Spring
Spring cloud gateway 如何在路由时进行负载均衡
Spring cloud gateway 如何在路由时进行负载均衡
562 15