FeignClient-调用流程

2024-08-30 11:04
文章标签 流程 调用 feignclient

本文主要是介绍FeignClient-调用流程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

调用流程

首先请求会被FeignInvocationHandler 进行拦截,然后dispatch找到应的方法进行调用。
在这里插入图片描述
MethodHandler我们看看:
在这里插入图片描述
在接口断点会进入下面这个类:
在这里插入图片描述
我们可以看到是通过RestTemplage实现的,并且里面有Retryer重试机制。然后方法走到executeAndDecode
在这里插入图片描述
在下面这个方法使用了拦截器:
在这里插入图片描述
那么拦截器从那里来呢?看是从配置里来的config里面配置拦截器。
在这里插入图片描述
好我们继续看拦截器以后的逻辑,可以看到通过Client调用了execute方法,Client的类型是LoadBalancerFeignClient。
在这里插入图片描述
那么为什么会是LoadBalancerFeignClient类型呢,是因为在创建对象的时候就是LoadBalancerFeignClient
在这里插入图片描述

好继续往下走看执行逻辑,可以看到使用了Ribbon,这也验证了Feign是基于Ribbon的:
在这里插入图片描述
然后我们继续看lbClient这个方法:
在这里插入图片描述

在这里插入图片描述
这个方法就是创建LoadBalancer并且将它缓存起来。

接着我们继续看:
在这里插入图片描述
继续跟踪会执行:
在这里插入图片描述
注意这个selectServer(),继续追综:
在这里插入图片描述
这块就非常的关键了ILoadBalancer,这个ILoadBalancer哪里来的呢?

在这里插入图片描述
我们可以看到ServerList这个时候就和Ncaos进行打通了,
在这里插入图片描述
这个时候调用的时候会根据负载均衡策略选择一台服务进行调用。但是这里有个疑问,Ribbon也有这个配置,那么是怎么做到使用了Nacos的实现呢?
在这里插入图片描述
然后我找源码找到了下面这个@RibbonClients(defaultConfiguration = NacosRibbonClientConfiguration.class)这里就指定了默认的NacosRibbonClientConfiguration实现是nacos的。

@Configuration(proxyBeanMethods = false)
@EnableConfigurationProperties
@ConditionalOnBean(SpringClientFactory.class)
@ConditionalOnRibbonNacos
@ConditionalOnNacosDiscoveryEnabled
@AutoConfigureAfter(RibbonAutoConfiguration.class)
@RibbonClients(defaultConfiguration = NacosRibbonClientConfiguration.class)
public class RibbonNacosAutoConfiguration {}

这篇关于FeignClient-调用流程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1120632

相关文章

Spring Security中用户名和密码的验证完整流程

《SpringSecurity中用户名和密码的验证完整流程》本文给大家介绍SpringSecurity中用户名和密码的验证完整流程,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 首先创建了一个UsernamePasswordAuthenticationTChina编程oken对象,这是S

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Python中Tensorflow无法调用GPU问题的解决方法

《Python中Tensorflow无法调用GPU问题的解决方法》文章详解如何解决TensorFlow在Windows无法识别GPU的问题,需降级至2.10版本,安装匹配CUDA11.2和cuDNN... 当用以下代码查看GPU数量时,gpuspython返回的是一个空列表,说明tensorflow没有找到

python如何调用java的jar包

《python如何调用java的jar包》这篇文章主要为大家详细介绍了python如何调用java的jar包,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以参考一下... 目录一、安装包二、使用步骤三、代码演示四、自己写一个jar包五、打包步骤六、方法补充一、安装包pip3 install

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级

SpringBoot整合Flowable实现工作流的详细流程

《SpringBoot整合Flowable实现工作流的详细流程》Flowable是一个使用Java编写的轻量级业务流程引擎,Flowable流程引擎可用于部署BPMN2.0流程定义,创建这些流程定义的... 目录1、流程引擎介绍2、创建项目3、画流程图4、开发接口4.1 Java 类梳理4.2 查看流程图4

java Long 与long之间的转换流程

《javaLong与long之间的转换流程》Long类提供了一些方法,用于在long和其他数据类型(如String)之间进行转换,本文将详细介绍如何在Java中实现Long和long之间的转换,感... 目录概述流程步骤1:将long转换为Long对象步骤2:将Longhttp://www.cppcns.c

Java调用C#动态库的三种方法详解

《Java调用C#动态库的三种方法详解》在这个多语言编程的时代,Java和C#就像两位才华横溢的舞者,各自在不同的舞台上展现着独特的魅力,然而,当它们携手合作时,又会碰撞出怎样绚丽的火花呢?今天,我们... 目录方法1:C++/CLI搭建桥梁——Java ↔ C# 的“翻译官”步骤1:创建C#类库(.NET

SpringCloud中的@FeignClient注解使用详解

《SpringCloud中的@FeignClient注解使用详解》在SpringCloud中使用Feign进行服务间的调用时,通常会使用@FeignClient注解来标记Feign客户端接口,这篇文章... 在Spring Cloud中使用Feign进行服务间的调用时,通常会使用@FeignClient注解

C/C++和OpenCV实现调用摄像头

《C/C++和OpenCV实现调用摄像头》本文主要介绍了C/C++和OpenCV实现调用摄像头,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录准备工作1. 打开摄像头2. 读取视频帧3. 显示视频帧4. 释放资源5. 获取和设置摄像头属性