Feign是从Netflix中分离出来的轻量级项目,能够在类接口上添加注释,成为一个REST API 客户端,Feign默认集成了Ribbon。

  Feign中对 Hystrix 有依赖关系。Feign只是一个便利的rest框架,简化调用,最后还是通过ribbon在注册服务器中找到服务实例,然后对请求进行分配

  Feign是一种声明式、模板化的HTTP客户端。在Spring Cloud中使用Feign, 我们可以做到使用HTTP请求远程服务时能与调用本地方法一样的编码体验,开发者完全感知不到这是远程方法,更感知不到这是个HTTP请求。

一、使用方式

  1、首先写好需要注册进注册中心的服务接口UserServiceController,该接口相当于service层,只是以RestFULL接口的形式供远程调用

@RestController
@RequestMapping("userService")
public class UserServiceController {@GetMapping("getUser/{userId}")public User getUser(@PathVariable("userId") String userId){System.out.println("获取User,更具UserId,查询User-->" + userId);User user = new User();user.setUserName("Tom");user.setPassword("123");return user;}@PostMapping("saveUser")public String saveUser(@RequestBody User user){System.out.println("保存User--->" + JSON.toJSONString(user));return "userId:010100100101";}@GetMapping("deleteUser/{userId}")public Boolean deleteUser(@PathVariable("userId") String userId){System.out.println("删除用户--->" + userId);return true;}@RequestMapping(value = "findUserByUserNameAndPassword")public User findUserByUserNameAndPassword(String userName, String password){System.out.println("userService--->" + userName + "  password--->" + password);User user = new User();user.setUserName("Tomcat");user.setPassword("123");return user;}

  2、在请求远程服务的项目的POM.XML文件中引入对Feign依赖

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-feign</artifactId>
</dependency>

  3、创建FeignClient

@FeignClient(value="springcloud-userservcie")
public interface UserClient {@RequestMapping(value = "userService/getUser/{userId}", method = RequestMethod.GET)public User getUser(@PathVariable("userId") String userId);@RequestMapping(value = "userService/saveUser", method = RequestMethod.POST)public String saveUser(User user);@RequestMapping(value = "userService/deleteUser/{userId}", method = RequestMethod.GET)public Boolean deleteUser(@PathVariable("userId") String userId);@RequestMapping(value = "userService/findUserByUserNameAndPassword", method = RequestMethod.GET)public User findUserByUserNameAndPassword(@RequestParam("userName") String userName, @RequestParam("password") String password);    }

  • @FeignClient(value="springcloud-userservcie"):用于通知Feign组件对该接口进行代理(不需要编写接口实现),value属性指定我们要调用注册中心的服务ID。使用者可直接通过@Autowired注入。
  • @RequestMapping表示在调用该方法时需要向/group/{groupId}发送请求。
  • @PathVariable与SpringMVC中对应注解含义相同。

原理:Spring Cloud应用在启动时,Feign会扫描标有@FeignClient注解的接口,生成代理,并注册到Spring容器中。生成代理时Feign会为每个接口方法创建一个RequetTemplate对象,该对象封装了HTTP请求需要的全部信息,请求参数名、请求方法等信息都是在这个过程中确定的,Feign的模板化就体现在这里

  4、在Controller调用

@RestController
@RequestMapping("userClient")
public class UserController {@Autowiredprivate UserClient userClient;@RequestMapping(value = "getUser/{userId}", method = RequestMethod.GET)public User getUser(@PathVariable("userId") String userId){return userClient.getUser(userId);}@RequestMapping(value = "saveUser", method = RequestMethod.POST)public String saveUser(User user){return userClient.saveUser(user);}@RequestMapping(value = "deleteUser/{userId}", method = RequestMethod.GET)public Boolean deleteUser(@PathVariable("userId") String userId){return userClient.deleteUser(userId);}@RequestMapping(value = "findUserByUserNameAndPassword")public User findUserByUserNameAndPassword(String userName, String password){System.out.println("userClient--->" + userName + "  password--->" + password);return userClient.findUserByUserNameAndPassword(userName, password);}}

  5、启动类上添加Feign注解@EnableFeignClients

@Configuration
@ComponentScan
@EnableAutoConfiguration
@EnableEurekaClient
@EnableFeignClients
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}

转载于:https://www.cnblogs.com/JoeyWong/p/9458998.html

Spring Cloud 之 Feign 使用HTTP请求远程服务相关推荐

  1. 解决Spring Cloud中Feign/Ribbon第一次请求失败的方法

    前言 在Spring Cloud中,Feign和Ribbon在整合了Hystrix后,可能会出现首次调用失败的问题,要如何解决该问题呢? 造成该问题的原因 Hystrix默认的超时时间是1秒,如果超过 ...

  2. Spring Cloud(四):Spring Cloud Alibaba Feign Dubbo

    扩展点 RequestInterceptor#apply 扩展点 feign.Client#execute spring cloud dubbo 调用 RPC RPC 全称是 Remote Proce ...

  3. Spring Cloud (Eureka,Feign,Hystrix整合)

    Spring Cloud(Eureka,Feign,Hystrix整合) Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代 ...

  4. spring cloud gateway中解决第一次请求失败的问题

    spring cloud gateway中解决第一次请求失败的问题 参考文章: (1)spring cloud gateway中解决第一次请求失败的问题 (2)https://www.cnblogs. ...

  5. Spring Cloud Gateway-ServerWebExchange核心方法与请求或者响应内容的修改

    Spring Cloud Gateway-ServerWebExchange核心方法与请求或者响应内容的修改 前提 本文编写的时候使用的Spring Cloud Gateway版本为当时最新的版本Gr ...

  6. Spring Cloud Open Feign系列【11】Feign 编码解码器Encoder和Decoder源码分析

    文章目录 概述 接口及相关实现类 Encoder 接口 Decoder接口 执行流程源码分析 1. 项目结构改造 2. 编码器流程 3. 解码器流程 4. 异常解码处理流程 5. 404异常特殊处理 ...

  7. spring cloud+zookeeper+feign整合 简单实例(一)

    一.前言 各位热爱知识的小伙伴们大家好呀!很高兴大家能点开这个博客,这是我个人的第一篇博客,之后也会持续的更新java以及spring项目的相关代码,希望大家持续关注.如果对本篇博客有什么不懂的地方或 ...

  8. Spring Cloud中Feign如何统一设置验证token

    前面我们大致的聊了下如何保证各个微服务之前调用的认证问题 Spring Cloud中如何保证各个微服务之间调用的安全性 Spring Cloud中如何保证各个微服务之间调用的安全性(下篇) 原理是通过 ...

  9. spring cloud利用feign和sentinel进行内部或外部远程调用

    一.FeignClient注解 FeignClient注解被@Target(ElementType.TYPE)修饰,表示FeignClient注解的作用目标在接口上 /* Copyright 2013 ...

最新文章

  1. JavaSE(二十三)——JVM
  2. idea连接mysql
  3. 图的遍历DFS与BFS(邻接表)
  4. 阅读笔记11-孤独后厂村:30万互联网人跳不出的中国硅谷
  5. Android Studio “Project Structure”选项目录结构显示异常
  6. 多道程序设计有哪些新特性呢?它又是如何实现程序的并发执行的呢?
  7. UCHome二次开发 规范
  8. ASK,OOK,FSK的联系和区别
  9. vulhub环境搭建
  10. python项目实战:免费下载kugou任意付费音乐
  11. 2015浙大计算机考研,2015浙大计算机考研机试题解.pdf
  12. CRACK:CAD Exchanger SDK 3.15.0/MAC/WIN/LINUX/Android
  13. VB实现游戏进程多开
  14. 【量化交易】量化分析概览
  15. 如果Windows下Quick软件运行时显示无权限打开exe
  16. 鲁大师电动车智能化测评报告第九期
  17. c++ mupdf编译
  18. Debezium系列之:快速了解Debezium 2.0.0.Final新的特性
  19. matlab heaviside函数生成矩形脉冲
  20. 【session】Java电商平台开发技能图谱,探秘双十一百万PV

热门文章

  1. python继承语法_python中继承父类的例子(python3的语法)
  2. mac os11以下安装Xcode
  3. Linux 实操 —— Linux 系统性能分析
  4. Java基础日常总结!!
  5. js清空文本框的值_一个Vue.js实例控制字变大变小,含样式操作,flex布局。「603」...
  6. php本地文件打包代码,PHP实战:几行代码轻松实现PHP文件打包下载zip
  7. mysql 目录更改 php,Linux下更改MySQL目录
  8. maven仲裁机制_maven仲裁机制
  9. .net 5 正式版_ASP.NET Core 3时代全新开启,DevExpress ASP.NET增强Data Grid
  10. mysql ip to int_ip网段转换程序(把ip地址转换成相对就的整数)