Spring Cloud 之 Feign 使用HTTP请求远程服务
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请求远程服务相关推荐
- 解决Spring Cloud中Feign/Ribbon第一次请求失败的方法
前言 在Spring Cloud中,Feign和Ribbon在整合了Hystrix后,可能会出现首次调用失败的问题,要如何解决该问题呢? 造成该问题的原因 Hystrix默认的超时时间是1秒,如果超过 ...
- Spring Cloud(四):Spring Cloud Alibaba Feign Dubbo
扩展点 RequestInterceptor#apply 扩展点 feign.Client#execute spring cloud dubbo 调用 RPC RPC 全称是 Remote Proce ...
- Spring Cloud (Eureka,Feign,Hystrix整合)
Spring Cloud(Eureka,Feign,Hystrix整合) Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代 ...
- spring cloud gateway中解决第一次请求失败的问题
spring cloud gateway中解决第一次请求失败的问题 参考文章: (1)spring cloud gateway中解决第一次请求失败的问题 (2)https://www.cnblogs. ...
- Spring Cloud Gateway-ServerWebExchange核心方法与请求或者响应内容的修改
Spring Cloud Gateway-ServerWebExchange核心方法与请求或者响应内容的修改 前提 本文编写的时候使用的Spring Cloud Gateway版本为当时最新的版本Gr ...
- Spring Cloud Open Feign系列【11】Feign 编码解码器Encoder和Decoder源码分析
文章目录 概述 接口及相关实现类 Encoder 接口 Decoder接口 执行流程源码分析 1. 项目结构改造 2. 编码器流程 3. 解码器流程 4. 异常解码处理流程 5. 404异常特殊处理 ...
- spring cloud+zookeeper+feign整合 简单实例(一)
一.前言 各位热爱知识的小伙伴们大家好呀!很高兴大家能点开这个博客,这是我个人的第一篇博客,之后也会持续的更新java以及spring项目的相关代码,希望大家持续关注.如果对本篇博客有什么不懂的地方或 ...
- Spring Cloud中Feign如何统一设置验证token
前面我们大致的聊了下如何保证各个微服务之前调用的认证问题 Spring Cloud中如何保证各个微服务之间调用的安全性 Spring Cloud中如何保证各个微服务之间调用的安全性(下篇) 原理是通过 ...
- spring cloud利用feign和sentinel进行内部或外部远程调用
一.FeignClient注解 FeignClient注解被@Target(ElementType.TYPE)修饰,表示FeignClient注解的作用目标在接口上 /* Copyright 2013 ...
最新文章
- JavaSE(二十三)——JVM
- idea连接mysql
- 图的遍历DFS与BFS(邻接表)
- 阅读笔记11-孤独后厂村:30万互联网人跳不出的中国硅谷
- Android Studio “Project Structure”选项目录结构显示异常
- 多道程序设计有哪些新特性呢?它又是如何实现程序的并发执行的呢?
- UCHome二次开发 规范
- ASK,OOK,FSK的联系和区别
- vulhub环境搭建
- python项目实战:免费下载kugou任意付费音乐
- 2015浙大计算机考研,2015浙大计算机考研机试题解.pdf
- CRACK:CAD Exchanger SDK 3.15.0/MAC/WIN/LINUX/Android
- VB实现游戏进程多开
- 【量化交易】量化分析概览
- 如果Windows下Quick软件运行时显示无权限打开exe
- 鲁大师电动车智能化测评报告第九期
- c++ mupdf编译
- Debezium系列之:快速了解Debezium 2.0.0.Final新的特性
- matlab heaviside函数生成矩形脉冲
- 【session】Java电商平台开发技能图谱,探秘双十一百万PV
热门文章
- python继承语法_python中继承父类的例子(python3的语法)
- mac os11以下安装Xcode
- Linux 实操 —— Linux 系统性能分析
- Java基础日常总结!!
- js清空文本框的值_一个Vue.js实例控制字变大变小,含样式操作,flex布局。「603」...
- php本地文件打包代码,PHP实战:几行代码轻松实现PHP文件打包下载zip
- mysql 目录更改 php,Linux下更改MySQL目录
- maven仲裁机制_maven仲裁机制
- .net 5 正式版_ASP.NET Core 3时代全新开启,DevExpress ASP.NET增强Data Grid
- mysql ip to int_ip网段转换程序(把ip地址转换成相对就的整数)