OpenFeign—服务间的调用一.什么是Feign和OpenFeign?在使用Feign或者OpenFeign前,服务之间的调用路径在函数内部设置:能不能像controller调用service一样,通过注入的方式设置呢 。Feign和OpenFeign可以实现 。
Feign:是声明式的web service客户端,它让微服务之间的调用变得更简单了,可以帮助我们实现面向接口编程,类似controller调用service 。Feign内置了Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务
【OpenFeign】OpenFeign:是Spring Cloud在Feign的基础上支持了SpringMVC的注解,如@RequestMapping等等 。OpenFeign 没有内置 Ribbon,需要单独对 Ribbon 进行配置
springboot 2.0 以上基本上使用openfeign,openfeign 如果从框架结构上看就是2019年feign停更后出现版本,也可以说大多数新项目都用openfeign,2018年以前的项目在使用feign 。
二.OpenFeign怎么使用?1.入门案例在前面Eureka和Ribbon案例的基础之上
1.1 添加Jar包<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId></dependency>1.2 添加注解1.3 创建客户端接口@FeignClient 指定服务的名称
@RequestMapping 中的value是设置目标服务的请求路径 method设置请求方法
1.4 使用
1.5 访问访问服务消费者,服务消费者会调用服务提供者中的方法
http://localhost:8080/goods
2.如何传递参数?2.1参数传递原则1.传递单个参数时,建议使用@PathVariable
2.传递多个参数时,建议采用@RequestParam
3.传递对象参数时,统一采用json的方式,添加@RequestBody注解 。
4. 如果传递的参数比较复杂时,默认会采用post的请求方式
2.2 在服务提供方添加带参数的方法//创建接口,当只有单个参数传递时,建议使用@PathVariable@GetMapping("/goods/{id}")public ResponseResult searchGoodsById(@PathVariable Integer id){ Goods goods=new Goods(id,"手机",100*id); ResponseResult<Goods> result= Response.createOkResp("单个参数",goods); return result;}//创建接口,当有多个参数时,建议用@RequestParam@GetMapping("/searchGoodsByParam")public ResponseResult searchGoodsByParam(@RequestParam Integer id, @RequestParam String name){ Goods goods=new Goods(id,name,100*id); ResponseResult<Goods> result= Response.createOkResp("多个参数",goods); return result;}//创建接口,对象参数时,使用@RequestBody//如果传递的参数比较复杂时,默认会采用post的请求方式@PostMapping("/saveGoods")public ResponseResult saveGoods(@RequestBody Goods goods) { ResponseResult<Goods> result= Response.createOkResp("对象参数",goods); return result;}2.3 在服务消费方创建接口,用来调用服务注意:
接口中不支持GetMapping 和PostMapping要用RequestMapping方式,然后指定RequestMethod为Get@PathVariable和@RequestParam中的value不要省
@RequestMapping(value=https://www.huyubaike.com/biancheng/"/goods/{id}",method = RequestMethod.GET)public ResponseResult searchGoodsById(@PathVariable(value = "id") Integer id);@RequestMapping(value="/searchGoodsByParam",method = RequestMethod.GET)public ResponseResult searchGoodsByParam(@RequestParam(value = "id") Integer id, @RequestParam(value = "name") String name);@RequestMapping(value = "/saveGoods",method = RequestMethod.GET)public ResponseResult saveGoods(@RequestBody Goods goods) ;
经验总结扩展阅读
- 油温170度怎么判断
- 中 学习ASP.NET Core Blazor编程系列十——路由
- 抢鲜体验 JetBrains新产品Aqua——自动化测试开发工具
- 3 onps栈使用说明——tcp、udp通讯测试
- JUC学习笔记——共享模型之管程
- AGC007C Pushing Balls —— 期望的神题
- three.js 如何使用webgl实现3D储能,3D储能站,3D智慧储能、储能柜的三维可视化解决方案——第十七课
- 2 onps栈使用说明——ping、域名解析等网络工具测试
- 电影行业中的彩蛋—词源自一种什么 电影行业的彩蛋一词的由来
- Java8新特性—四大内置函数式接口