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


    Spring Cloud 之 Feign 简介及简单使用

    1. Feign 简介

    1. Feign是在RestTemplate基础上封装的,使用注解的方式来声明一组与服务提供者Rest接口所对应的本地Java API接口方法。
    2. Feign将远程Rest接口抽象成一个声明式的FeignClient(Java API)客户端,并且负责完成FeignClient客户端和服务提供方的Rest接口绑定。
    3. Feign具备可插拔的注解支持,包括Feign注解和JAX-RS注解。同时,对于Feign自身的一些主要组件,比如编码器和解码器等,也以可插拔的方式提供,在有需求时方便扩张和替换它们。
    4. 在 Spring Cloud 中使用 Feign,可以做到使用 HTTP 请求访问远程服务,就像调用本地方法一样的,开发者完全感知不到这是在调用远程方法,更感知不到在访问 HTTP 请求。接下来介绍一下 Feign 的特性,具体如下:
      1. 可插拔的注解支持,包括 Feign 注解和AX-RS注解。
      2. 支持可插拔的 HTTP 编码器和解码器。
      3. 支持 Hystrix 和它的 Fallback。
      4. 支持 Ribbon 的负载均衡。
      5. 支持 HTTP 请求和响应的压缩。
    5. 它整合了 Ribbon 和 Hystrix,从而不需要开发者针对 Feign 对其进行整合。Feign 还提供了 HTTP 请求的模板,通过编写简单的接口和注解,就可以定义好 HTTP 请求的参数、格式、地址等信息。Feign 会完全代理 HTTP 的请求,在使用过程中我们只需要依赖注入 Bean,然后调用对应的方法传递参数即可。

    2. 使用步骤

    1. 使用Feign的第1步是在项目的pom.xml文件中添加Feign依赖:
       
      <dependency> 
      	<groupId>org.springframework.cloudgroupId> 
      	<artifactId>spring-cloud-starter-openfeignartifactId> 
      dependency> 
      
      • 1
      • 2
      • 3
      • 4
      • 5
    2. 使用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); 
         } 
      } 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
    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
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      在上面接口的@FeignClient注解配置中,使用value指定了需要绑定的服务,使用path指定了接口的URL前缀。然后使用@GetMapping和@RequestMapping两个方法级别的注解分别声明了两个远程调用接口。
    4. 使用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
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
  • 相关阅读:
    手机端实现触摸拖拽效果
    cookie
    Linux--系统基础磁盘管理相关知识详解笔记
    95837-47-1,羧基衍生物ICG(indocyaninegreen)
    基于SpringBoot的教务管理系统
    234. 回文链表
    【mmWave】一、IWR6843ISK-ODS毫米波雷达【固件烧写和上手使用】流程
    C++中的通俗理解左值,右值,左值引用,右值引用
    C++学习笔记(十二)
    某小厂面试题
  • 原文地址:https://blog.csdn.net/itigoitie/article/details/125893663