Spring Cloud微服务之Feign服务调用(十一)
Feign服务调用
- 一、Feign简介
- 基本概念
- 二、实现服务调用
- 1、编写删除源文件接口
- 2、在service模块添加pom依赖
- 3、在调用端(service_user)的启动类添加注解
- 4、新建一个包client、里面新建一个类FileClient.java
- 5、调用微服务(在service_user模块中)
- 1、首先注入FileClient
- 2、修改删除数据接口代码
- 3、提前准好好数据库数据
- 6、启动项目测试
一、Feign简介
基本概念
Feign是Netflix开发的声明式、模板化的HTTP客户端,
Feign可以帮助我们更快捷、优雅地调用HTTP API。
Feign支持多种注解,例如Feign自带的注解或者JAX-RS注解等。
Spring Cloud对Feign进行了增强,使Feign支持了Spring MVC注解,并整合了Ribbon和Eureka,从而让Feign的使用更加方便。
Spring Cloud Feign是基于Netflix feign实现,整合了Spring Cloud Ribbon和Spring Cloud Hystrix,除了提供这两者的强大功能外,还提供了一种声明式的Web服务客户端定义的方式。
Spring Cloud Feign帮助我们定义和实现依赖服务接口的定义。在Spring Cloud feign的实现下,只需要创建一个接口并用注解方式配置它,即可完成服务提供方的接口绑定,简化了在使用Spring Cloud Ribbon时自行封装服务调用客户端的开发量。
二、实现服务调用
在我们搭建好的service_file模块中,编写删除源文件的接口。
1、编写删除源文件接口
CrmFileController.java
//根据文件 url 删除源文件@PostMapping(value = "removeCrmFileById/{id}")public ResultBean removeCrmFileById(@PathVariable Integer id){return crmFileService.removeCrmFileById(id);}
CrmFileServiceImpl.java接口实现类
@Override
public ResultBean removeCrmFileById(Integer id) {//查询源文件真实的 urlCrmFile crmFile = baseMapper.selectById(id);String url = crmFile.getUrl();//根据url 删除源文件if(!StringUtils.isEmpty(url)){File folder =new File(url);boolean flag = folder.delete();if(flag){return ResultBean.ok(); //删除成功}else {return ResultBean.error(); //删除失败}}else {return ResultBean.error().message("源文件不存在,无法删除");}
}
2、在service模块添加pom依赖
<!--服务调用--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>
3、在调用端(service_user)的启动类添加注解
@EnableFeignClients //服务调用
4、新建一个包client、里面新建一个类FileClient.java
FileClient.java
@FeignClient("service-file") //@FeignClient注解用于指定从哪个服务中调用功能 ,名称与被调用的服务名保持一致。
@Component //交给spring管理
public interface FileClient {//根据文件 url 删除源文件@PostMapping(value = "/fileservice/crm-file/removeCrmFileById/{id}") //这个路径映射,是全路径映射public ResultBean removeCrmFileById(@PathVariable("id") Integer id); //@PathVariable注解一定要指定参数名称,否则出错}
注意:@PostMapping(value = “/fileservice/crm-file/removeCrmFileById/{id}”)
是service_file模块中的这个方法的全映射路径
5、调用微服务(在service_user模块中)
我们上一篇写的代码,我们重新改造。 @PostMapping(value = “/fileservice/crm-file/removeCrmFileById/{id}”) 这个接口中我们只需要传入该条记录的id,他就能帮我们实现源文件的删除。
1、首先注入FileClient
//已经交给spring管理了、我们直接注入使用@Autowiredprivate FileClient fileClient;
2、修改删除数据接口代码
//根据id、删除删除源文件+删除数据库数据记录@PostMapping(value = "removeCrmFile/{id}")public ResultBean removeCrmFile(@PathVariable Integer id){//1、调用service_file模块服务接口,实现源文件删除if(id != null){System.out.println("开始调用...");ResultBean resultBean = fileClient.removeCrmFileById(id);if(resultBean.getCode() == 2001){System.out.println("删除失败...");}System.out.println("调用结束...");}//2、最后删除数据库记录boolean remove = crmFileService.removeById(id);if (remove){return ResultBean.ok();}else {return ResultBean.error();}}
3、提前准好好数据库数据
注意:url 真实路径下面放一张图片,方便测试。
6、启动项目测试
首先启动两个模块,service_user和service_file,9901端口和9902端口
发送POST请求:http://localhost:9901/eduservice/crm-file/removeCrmFile/3
控制台打印输出
开始调用...
2020-05-15 01:36:03.618 INFO 9208 --- [nio-9901-exec-1] c.netflix.config.ChainedDynamicProperty : Flipping property: service-file.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647
2020-05-15 01:36:03.733 INFO 9208 --- [nio-9901-exec-1] c.netflix.loadbalancer.BaseLoadBalancer : Client: service-file instantiated a LoadBalancer: DynamicServerListLoadBalancer:{NFLoadBalancer:name=service-file,current list of Servers=[],Load balancer stats=Zone stats: {},Server stats: []}ServerList:null
2020-05-15 01:36:03.754 INFO 9208 --- [nio-9901-exec-1] c.n.l.DynamicServerListLoadBalancer : Using serverListUpdater PollingServerListUpdater
2020-05-15 01:36:03.794 INFO 9208 --- [nio-9901-exec-1] c.netflix.config.ChainedDynamicProperty : Flipping property: service-file.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647
2020-05-15 01:36:03.796 INFO 9208 --- [nio-9901-exec-1] c.n.l.DynamicServerListLoadBalancer : DynamicServerListLoadBalancer for client service-file initialized: DynamicServerListLoadBalancer:{NFLoadBalancer:name=service-file,current list of Servers=[192.168.162.1:9902],Load balancer stats=Zone stats: {unknown=[Zone:unknown; Instance count:1; Active connections count: 0; Circuit breaker tripped count: 0; Active connections per server: 0.0;]
},Server stats: [[Server:192.168.162.1:9902; Zone:UNKNOWN; Total Requests:0; Successive connection failure:0; Total blackout seconds:0; Last connection made:Thu Jan 01 08:00:00 CST 1970; First connection made: Thu Jan 01 08:00:00 CST 1970; Active Connections:0; total failure count in last (1000) msecs:0; average resp time:0.0; 90 percentile resp time:0.0; 95 percentile resp time:0.0; min resp time:0.0; max resp time:0.0; stddev resp time:0.0]
]}ServerList:org.springframework.cloud.alibaba.nacos.ribbon.NacosServerList@7cc3506c
调用结束...
MySQL中查看数据库、本地盘符下查看源文件、是不是就都不存在了,成功删除了源文件,删除了数据记录,实现了服务间的调用。
Spring Cloud微服务之Feign服务调用(十一)相关推荐
- Spring Cloud微服务系列文,服务调用框架Feign
之前博文的案例中,我们是通过RestTemplate来调用服务,而Feign框架则在此基础上做了一层封装,比如,可以通过注解等方式来绑定参数,或者以声明的方式来指定请求返回类型是JSON. 这种 ...
- Spring Cloud微服务之Feign——声明式服务间调用
目录 写在前面 服务间调用常见的方案 方案一:HttpClient 方案二:RestTemplate 方案三:Feign 框架版本问题及可能遇到的坑 搭建服务注册中心 搭建服务1--service-a ...
- 通过Feign实现Spring Cloud微服务调用
我们在上一篇文章通过restTemplate实现Spring cloud微服务的调用中介绍了spring cloud微服务的一种调用方式,本文我们介绍另一种调用spring cloud微服务的方式-- ...
- 实战系列-Spring Cloud微服务中三把利器Feign、Hystrix、Ribbon
导语 在之前的分享中分享过关于Fegin的底层实现原理,以及Spring Cloud OpenFegin的启动原理.在这次的分享中主要总结一下Spring Cloud 微服务架构的三把利器.对于F ...
- Java之 Spring Cloud 微服务的 SpringCloud Config 配置中心(第四个阶段)【二】【SpringBoot项目实现商品服务器端调用】
SpringCloud学习目录点击跳转对应的文章 Java之 Spring Cloud 微服务搭建(第一个阶段)[一][SpringBoot项目实现商品服务器端是调用] Java之 Spring Cl ...
- 一张图带你了解 Spring Cloud 微服务架构!
点击上方"搜云库技术团队",选择"设为星标" 回复"1024"或"面试题"获取4T学习资料 Feign Eureka R ...
- Dubbo和Spring Cloud微服务架构对比
一.为什么要使用微服务? 微服务提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合. 今天我们来了解下业内主要的微服务框架:Dubbo 和 Spring Cloud 微服务主要的优势 降 ...
- 一张图了解 Spring Cloud 微服务架构
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:http://rrd.me/epgWJ Feign Eure ...
- Spring Cloud微服务版本灰度发布新神器
项目地址:https://github.com/Nepxion/Discovery 强烈建议stra.fork该项目,该项目可以作为学习改造Spring Cloud组件的案例项目. Nepxion D ...
最新文章
- 每个程序员必看:如何在40岁后继续做软件开发?
- 连华为都在研究的计算机视觉,到底有多牛?
- Local模式下Spark程序只输出关键信息
- JavaScript / HTML5中的音效
- Linux服务器集群系统(四)--转
- 全局样式_CAD新手福利:不懂标注样式修改的请进来一看
- OS X 内核研究 准备知识
- docker启动报错 (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 9876 -j DNAT --
- php request对象,PHP 中TP5 Request 请求对象的实例详解
- Vb.net/VB 声明API函数实现父窗口功能
- Android自定义dialog对话框悬浮在界面上
- 汇编编程:在屏幕中间分别显示绿色,绿底红色,白色蓝底的字符串’welcome to masm!’
- Swift - 视频录制教程3(设置拍摄窗口大小,录制正方形视频)
- PDF怎么合并?这些合并方法你该知道
- 基于python的语料库数据处理_基于Python的语料库数据处理(三)
- 两角和与差的正弦、余弦、正切公式推导
- dhu复试基础——63 倒序
- 最好的.NetCore代码生成器
- Paddleocr 去除无关信息打印
- 详解MOS管阈值电压与沟长和沟宽的关系及影响阈值电压的因素
热门文章
- 信息学奥赛一本通 1411:区间内的真素数 | OpenJudge NOI 1.13 23:区间内的真素数
- 信息学奥赛一本通 2057:【例3.9 】星期几
- 信息学奥赛一本通(1232:Crossing River)
- 动态规划 —— 背包问题 P01 —— 0-1背包
- 小鱼的航程(改进版)(洛谷-P1424)
- 信息学奥赛一本通C++语言——1096:数字统计
- 1 QM配置-基本配置-维护工厂等级设置
- 40 SD配置-销售凭证设置-分配计划行类别
- 数组中查找並返回数组_剑指 Offer 04. 二维数组中的查找
- mysql php 流式读取_PHP MySQL 读取数据