SpringCloud --服务调用Feign
介绍
服务间通信简介
一个系统可以由不同的微服务构成,比如一个电商系统可以由订单服务、商品服务、用户服务等共同组成。 这些服务相互独立,但又相互依赖。由于它们相互依赖,所以需要通过通信的方式来进行相互调用。
服务间通信方式主要有两种:
(1) 基于HTTP的REST(SpringCloud)
(2) RPC(Dubbo)
SpringCloud服务间调用方式有两种:
(1) RestTemplate
(2) FeignClient
这两种方式都是通过REST接口调用服务的http接口
SpringCloud搭建各种微服务之后,服务间通常存在相互调用的需求,SpringCloud提供了@FeignClient 注解非常优雅的解决了这个问题,Feign的中文名称翻译过来是伪装。
实战中使用Feign进行服务间通信
1. 增加依赖(WKD项目中使用)
1 <dependency>
2 <groupId>org.springframework.cloud</groupId>
3 <artifactId>spring-cloud-starter-openfeign</artifactId>
4 </dependency>
说明:依赖有分feign和openfeign
(1) Feign本身不支持Spring MVC的注解,它有一套自己的注解;
(2) Spring Cloud OpenFeign是在Feign的基础上扩展了对Spring MVC注解的支持,如@RequesMapping等等,同时还整合了Ribbon和Eureka来提供均衡负载的HTTP客户端实现。
2、增加注解@EnableFeignClients
(1) 在Application启动类上增加注解@EnableFeignClients
(2)写在一个专门的配置文件中
说明:FeignClinentConfig 外部Restful接口引入:
如果Feignclien是外部包引入的,可能需要指定扫描路径,在注解@EnableFeignClients中指定
@EnableFeignClients(/*basePackages={"package.contains.fegin.clients"}*/)手写的Feigclient 在 .assemble.fegin 中通过组件@FeignClient 引入,就是说你需要加上你可能要调用中心的API的包路径,好比你的找个配置文件在库存中心inventory,你可能要调用到基础数据中心data,那你得加上扫描路径(类似com.xxx.center.data.api)。
3、新建一个feign接口
参数说明:
name:指定FeignClient的名称(微服务的名称),name属性会作为微服务的名称,用于服务发现(如果使用Nacos实现服务注册发现,name与服务的名称一致,使用eureka也一样);
url: url一般用于调试,可以手动指定@FeignClient调用的地址;
path: 定义当前FeignClient所有方法的requestMapping的统一前缀,,类似与controller类上的requestMapping;
4、调用feign
假如应用中心stock调用库存中心inventory,实现类中注入inventory中心的Api接口,直接调用。
1 @Service
2 public class BandServiceImpl implements IBandService {
3
4 @Resource
5 private IBandQueryApi bandQueryApi;
6
7 ......
8
9 @Override
10 public RestResponse<BandRespDto> queryBandById(Long id) {
11 //调用库存中心
12 return bandQueryApi.queryBandById(id);
13 }
14 }
FeignClient原理简述
(1)当程序启动时,会进行包扫描,扫描所有包下有@FeignClient注解的类,并将这些类注入到Spring IOC容器中。
(2)当定义的Feign接口中的方法被调用时,Feign通过JDK的动态代理为每个接口方法创建一个RequestTemplate对象。这个RequestTemplate对象中包含请求的所有信息,如请求参数,请求URL等。
(3)然后RequestTemplate生成Request,将Request交给Client处理,这个Client默认是JDK的HTTPUrlConnection,也可以是OKhttp、Apache的HTTPClient等。
(4)最后Client被封装成LoadBaLanceClient类,这个类结合Ribbon负载均衡发起服务之间的调用。
参考/好文
Spring Cloud中的服务间通信(RestTemplate和Feign)
https://blog.csdn.net/zhaohongfei_358/article/details/83148623
Feign的工作原理
https://juejin.im/post/5ccbe82851882544da5008ce
SpringCloud --服务调用Feign的更多相关文章
- SpringCloud 源码系列(6)—— 声明式服务调用 Feign
SpringCloud 源码系列(1)-- 注册中心 Eureka(上) SpringCloud 源码系列(2)-- 注册中心 Eureka(中) SpringCloud 源码系列(3)-- 注册中心 ...
- SpringCloud之声明式服务调用 Feign(三)
一 Feign简介 Feign是一种声明式.模板化的HTTP客户端,也是netflix公司组件.使用feign可以在远程调用另外服务的API,如果调用本地API一样.我们知道,阿里巴巴的doubbo采 ...
- SpringCloud开发学习总结(七)—— 声明式服务调用Feign(一)
在实践的过程中,我们会发现在微服务架构中实现客户端负载均衡的服务调用技术Spring Cloud Ribbon<SpringCloud开发学习总结(四)—— 客户端负载均衡Ribbon> ...
- springCloud中的服务调用feign
springCloud中的服务调用(要在调用端写) 前提进行了服务注册 流程: 1.在服务模块中添加依赖 <!--服务调用--> <dependency> <groupI ...
- 四、springcloud之服务调用Feign(二)
一.Fegin的常见应用 Feign的Encoder.Decoder和ErrorDecoder Feign将方法签名中方法参数对象序列化为请求参数放到HTTP请求中的过程,是由编码器(Encoder) ...
- 【Dalston】【第三章】声明式服务调用(Feign)
当我们通过RestTemplate调用其它服务的API时,所需要的参数须在请求的URL中进行拼接,如果参数少的话或许我们还可以忍受,一旦有多个参数的话,这时拼接请求字符串就会效率低下,并且显得好傻.那 ...
- 客户端负载均衡Feign之一:申明式服务调用Feign入门示例
Spring Cloud提供了Ribbon和Feign作为客户端的负载均衡. 前面使用了Ribbon做客户端负载均衡,使用Hystrix做容错保护,这两者被作为基础工具类框架被广泛地应用在各个微服务的 ...
- SpringCloud服务调用源码解析汇总
相信我,你会收藏这篇文章的,本篇文章涉及Ribbon.Hystrix.Feign三个组件的源码解析 Ribbon架构剖析 这篇文章介绍了Ribbon的基础架构,也就是下图涉及到的6大组件: Ribbo ...
- Spring Cloud 声明式服务调用 Feign
一.简介 在上一篇中,我们介绍注册中心Eureka,但是没有服务注册和服务调用,服务注册和服务调用本来应该在上一章就应该给出例子的,但是我觉得还是和Feign一起讲比较好,因为在实际项目中,都是使用声 ...
随机推荐
- 【开发工具】 使用阿里的 Teambition 跟踪BUG修复及需求管理
刚入公司几个月,公司新项目一直没有用协作工具进行BUG管理,公司也没有专业的测试工程师. 第一阶段开发到了尾声,工作效率实在太低,随决定使用一个比较现代一点的管理工具. 在众多在线项目协作软件中,我选 ...
- 一、java多线程编程核心技术之(笔记)——多线程的实现
概念:可以理解为在进程中独立运行的子任务.比如,QQ.exe在运行时就有很多子任务在运行,好友视屏线程,下载文件线程,传输数据线程等等. 优点:1.提升CPU资源利用率,提升系统性能. 一.多线程的实 ...
- NameSilo的DDNS动态域名解析
用Java写的,一个实时检测IP变化并更新DNS状态的工具,适用于在NameSilo购买的域名,如果你的域名是在其他商家购买的,修改为你自己的api就行.代码我放github了,地址: https:/ ...
- 5+App 相关记录
一.页面跳转到app 1.应用的manifest.json文件,plus --> distribute --> google 节点下,增加属性 schemes 2.打包后,在手机里安装. ...
- WinUI 3 Preview 3 发布了,再一次试试它的性能
1. WinUI 3 在微软 Build 2020 开发者大会上,WinUI 团队宣布可公开预览的 WinUI 3 Preview 1,它让开发人员可以在 Win32 中使用 WinUI.最终 XAM ...
- 在win7下安装texlive
首先到texlive官网下载texlive2017.iso 然后解压,找到install-tl-advanced.bat,用管理员权限双击,安装,关闭杀毒软件. 基本选择默认,前面路径可以按自己需求更 ...
- [日常摸鱼]poj1151Atlantis-扫描线
题意:给一堆长宽平行于坐标轴的长方形求并的面积 我个沙茶快写了一晚上- 大概思想就是先根据$y$坐标排个序,把$y$坐标离散化一下,放到线段树里面维护,这里的写法是让线段树的节点储存这个点对应的整段线 ...
- [从源码学设计]蚂蚁金服SOFARegistry 之 自动调节间隔周期性任务
[从源码学设计]蚂蚁金服SOFARegistry 之 自动调节间隔周期性任务 目录 [从源码学设计]蚂蚁金服SOFARegistry 之 自动调节间隔周期性任务 0x00 摘要 0x01 业务领域 0 ...
- 模拟sql注入实现远程桌面登录
首先用sql注入文件命令y url+一句话 into outfile 绝对路径/test.php 用蚁剑连接打开连接的终端 先看用户的权限 创建一个用户将它放入队列中 查看3389端口是否开启 0xd ...
- RabbitMQ 详解 五种队列-SpiritMark
上次带大家看了一下RabbitMQ的基本概念,今天我们来详解一下 RabbitMQ的五种队列,也算是一个笔记,如果对您有帮助,可以关注一下,便于下次光顾! 文章目录 1.简单队列 2.work 模式 ...