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服务调用(十一)相关推荐

  1. Spring Cloud微服务系列文,服务调用框架Feign

    之前博文的案例中,我们是通过RestTemplate来调用服务,而Feign框架则在此基础上做了一层封装,比如,可以通过注解等方式来绑定参数,或者以声明的方式来指定请求返回类型是JSON.    这种 ...

  2. Spring Cloud微服务之Feign——声明式服务间调用

    目录 写在前面 服务间调用常见的方案 方案一:HttpClient 方案二:RestTemplate 方案三:Feign 框架版本问题及可能遇到的坑 搭建服务注册中心 搭建服务1--service-a ...

  3. 通过Feign实现Spring Cloud微服务调用

    我们在上一篇文章通过restTemplate实现Spring cloud微服务的调用中介绍了spring cloud微服务的一种调用方式,本文我们介绍另一种调用spring cloud微服务的方式-- ...

  4. 实战系列-Spring Cloud微服务中三把利器Feign、Hystrix、Ribbon

    导语   在之前的分享中分享过关于Fegin的底层实现原理,以及Spring Cloud OpenFegin的启动原理.在这次的分享中主要总结一下Spring Cloud 微服务架构的三把利器.对于F ...

  5. Java之 Spring Cloud 微服务的 SpringCloud Config 配置中心(第四个阶段)【二】【SpringBoot项目实现商品服务器端调用】

    SpringCloud学习目录点击跳转对应的文章 Java之 Spring Cloud 微服务搭建(第一个阶段)[一][SpringBoot项目实现商品服务器端是调用] Java之 Spring Cl ...

  6. 一张图带你了解 Spring Cloud 微服务架构!

    点击上方"搜云库技术团队",选择"设为星标" 回复"1024"或"面试题"获取4T学习资料 Feign Eureka R ...

  7. Dubbo和Spring Cloud微服务架构对比

    一.为什么要使用微服务? 微服务提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合. 今天我们来了解下业内主要的微服务框架:Dubbo 和 Spring Cloud 微服务主要的优势 降 ...

  8. 一张图了解 Spring Cloud 微服务架构

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:http://rrd.me/epgWJ Feign Eure ...

  9. Spring Cloud微服务版本灰度发布新神器

    项目地址:https://github.com/Nepxion/Discovery 强烈建议stra.fork该项目,该项目可以作为学习改造Spring Cloud组件的案例项目. Nepxion D ...

最新文章

  1. 每个程序员必看:如何在40岁后继续做软件开发?
  2. 连华为都在研究的计算机视觉,到底有多牛?
  3. Local模式下Spark程序只输出关键信息
  4. JavaScript / HTML5中的音效
  5. Linux服务器集群系统(四)--转
  6. 全局样式_CAD新手福利:不懂标注样式修改的请进来一看
  7. OS X 内核研究 准备知识
  8. docker启动报错  (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 9876 -j DNAT --
  9. php request对象,PHP 中TP5 Request 请求对象的实例详解
  10. Vb.net/VB 声明API函数实现父窗口功能
  11. Android自定义dialog对话框悬浮在界面上
  12. 汇编编程:在屏幕中间分别显示绿色,绿底红色,白色蓝底的字符串’welcome to masm!’
  13. Swift - 视频录制教程3(设置拍摄窗口大小,录制正方形视频)
  14. PDF怎么合并?这些合并方法你该知道
  15. 基于python的语料库数据处理_基于Python的语料库数据处理(三)
  16. 两角和与差的正弦、余弦、正切公式推导
  17. dhu复试基础——63 倒序
  18. 最好的.NetCore代码生成器
  19. Paddleocr 去除无关信息打印
  20. 详解MOS管阈值电压与沟长和沟宽的关系及影响阈值电压的因素

热门文章

  1. 信息学奥赛一本通 1411:区间内的真素数 | OpenJudge NOI 1.13 23:区间内的真素数
  2. 信息学奥赛一本通 2057:【例3.9 】星期几
  3. 信息学奥赛一本通(1232:Crossing River)
  4. 动态规划 —— 背包问题 P01 —— 0-1背包
  5. 小鱼的航程(改进版)(洛谷-P1424)
  6. 信息学奥赛一本通C++语言——1096:数字统计
  7. 1 QM配置-基本配置-维护工厂等级设置
  8. 40 SD配置-销售凭证设置-分配计划行类别
  9. 数组中查找並返回数组_剑指 Offer 04. 二维数组中的查找
  10. mysql php 流式读取_PHP MySQL 读取数据