SpringCloud技术中@FeignClient()的使用

@FeignClient

Spring Cloud 中用于声明一个 Feign 客户端的注解。由于SpringCloud采用分布式微服务架构,难免在各个子模块下存在模块方法互相调用的情况。比如订单服务要调用库存服务的方法,@FeignClient()注解就是为了解决这个问题的。

Feign 是一个声明式的 Web Service 客户端,它的目的是让编写 HTTP 客户端变得更简单。通过 Feign,只需要创建一个接口,并使用注解来描述请求,就可以直接执行 HTTP 请求了。

@FeignClient()注解的源码要求它必须在Interface接口上使用( FeignClient注解被@Target(ElementType.TYPE)修饰,表示FeignClient注解的作用目标在接口上)

SpringBoot服务的启动类必须要有@EnableFeignClients 注解才能使@FeginClient注解生效

@FeignClient工作原理及整体流程

Feign服务调用的工作原理可以总结为以下几个步骤

首先通过@EnableFeignCleints注解开启FeignCleint。

根据Feign的规则实现接口,添加@FeignCleint注解。程序启动后,会扫描所有有@FeignCleint的类,并将这些信息注入到ioc容器中。

注入时从FeignClientFactoryBean.class获取FeignClient。

当接口的方法被调用时,通过jdk的代理,来生成具体的RequesTemplate,RequesTemplate生成http的Request。

Request交给Client去处理,其中Client可以是HttpUrlConnection、HttpClient也可以是Okhttp。

Client被封装到LoadBalanceClient类,这个类结合类Ribbon做到了负载均衡。

@FeignClient常用属性

name、value

指定FeignClient的名称,如果项目使用了Ribbon,name属性会作为微服务的名称,用于服务发现

这两个属性的作用是一样的,如果没有配置url,那么配置的值将作为服务的名称,用于服务的发现,反之只是一个名称

java 复制代码
@FeignClient(name = "order-server")
public interface OrderingRemoteClient {
	
	@GetMapping("/order/detail")
	public Order detailing(@RequestParam("orderId") String orderId);
}
相关推荐
褚眠莘7 分钟前
C#语言的加密货币
开发语言·后端·golang
爱的叹息8 分钟前
关于Spring MVC中@RequestParam注解的详细说明,用于在前后端参数名称不一致时实现参数映射。包含代码示例和总结表格
java·spring·mvc
315356691313 分钟前
一文带你了解二维码扫码的全部用途
前端·后端
ChinaRainbowSea19 分钟前
5. RabbitMQ 消息队列中 Exchanges(交换机) 的详细说明
java·分布式·后端·rabbitmq·ruby·java-rabbitmq
import_random35 分钟前
[投资]akshare库包(etf篇)
后端
bobz96543 分钟前
docker load tar 可以导入,而 ctr import 不行
后端
开心猴爷1 小时前
flutter集成极光推送google play版本
后端
shengjk11 小时前
快速搞懂湖仓一体发展历程:错过它,你将失去下一个大数据风口!
人工智能·后端
Supersist1 小时前
【我要找工作_02】学习MQ时,到底在学习个啥?
后端
拉丁解牛说技术1 小时前
一句话让deepseek实现基于Spring AI的AI chatbot
人工智能·spring·程序员