Feign入门篇

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: Feign是一个REST客户端库,它通过接口驱动的方式来定义REST客户端。Spring Cloud Netflix体系中的Eureka服务注册中心客户端支持Ribbon客户端负载均衡器,而Feign本质上是Ribbon的包装,其内部是通过Ribbon来进行服务查找和负载均衡。

1、简介

Feign是一个REST客户端库,它通过接口驱动的方式来定义REST客户端。Spring Cloud Netflix体系中的Eureka服务注册中心客户端支持Ribbon客户端负载均衡器,而Feign本质上是Ribbon的包装,其内部是通过Ribbon来进行服务查找和负载均衡。

在Spring Cloud Netflix体系中,我们通常会通过以下两种方式进行服务通信:

  1. 支持负载均衡的RestTemplate
  2. Feign生成的客户端接口

两种方式都是通过Ribbon进行服务查找,然后更加负载均衡策略选择服务进行服务通信,具体使用那种方式看个人爱好(小捌觉得Feign客户端接口这种方式,在代码上稍显复杂,但是更好管理)。

关于Feign的一点小知识:

大家经常听到有人说OpenFeign,有人说Feign,给人一种好像是两个东西的错觉。其实是因为Feign本身也是Netflix的开源项目,后面独立出来单独做了开源项目,改名为OpenFeign。这种情况其实很常见,比如鸿蒙-HarmonyOS就有Open HarmonyOS。


2、正文

正式开始Feign的学习之前,大家需要对微服务有一定的认识,关于这些知识点可以查看本专栏的往期文章,入门微服务、Eureka相关知识,并且搭建一个Eureka服务和客户端之后在来学习Feign。

2.1 服务搭建

搭建一个Eureka Server用于服务注册发现,此外准备两个相同的服务提供者SERVER和一个服务消费者CONSUMER,整体的服务如下所示:

2.2 RestTemplate

由于Feign和RestTemplate一样如果需要进行查找服务,都是通过集成Ribbon来实现的,所以这里向看在上面这种微服务架构中,如何通过RestTemplate来消费服务。这里贴出的服务端代码,在后面的Feign中是相同的,后面将不会再贴出。

1、服务提供者Server-01暴露REST端点:

2、服务提供者Server-02暴露REST端点:

3、声明RestTemplate bean,并且添加注解@LoadBalanced,这个注解会告诉Spring Boot这个RestTemplate需要具有通过Ribbon查找服务的能力,我这里因为演示所以在启动类中声明。

4、服务消费者Consumer通过RestTemplate消费服务代码:

这里服务提供者有两个,我们借助Ribbon和Eureka客户端可以实现服务的发现和负载均衡,注意服务地址不再硬编码,而是编写成服务提供者注册在Eureka上的服务名称server(不区分大小写)。

5、通过任意Http客户端请求Consumer提供的/consumer端点,不断刷新请求,可以看到RestTemplate 会依次轮训Server-01和Server-02

2.3 Feign Client

1、导入依赖

2、添加配置类启动Feign Client,可以直接在启动类上配置

3、定义Feign接口

这个接口定义完成,不需要实现类。在Spring boot运行时,当Feign发现了这个接口,Feign会自动创建一个实现类并将其暴露为Spring应用上下文中的bean

4、通过Feign客户端接口发送请求

注入Feign接口,可以直接调用接口中的方法(具体实现由Feign完成)即可发起请求。

5、通过任意Http客户端请求Consumer提供的/consumer端点,不断刷新请求,可以看到Feign Client会依次轮训Server-01和Server-02

2.4 总结

这篇文章入门了Feign,也顺带讲了下RestTemplate的简单使用。需要注意的是Fegin它并不负责解析服务名、负载均衡,这些都是其集成的Ribbon实现的。Feign可以替代RestTemplate,相比之下代码的可读性确实增强了,但是整体性能是有些许下降的。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
目录
相关文章
|
12月前
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL的服务器日志文件
本文介绍了PostgreSQL数据库的物理存储结构,重点讨论了服务器日志文件。通过`pg_ctl`命令启动PostgreSQL实例时,使用`-l`参数指定日志文件位置,记录数据库启动、运行及关闭过程中的关键信息。附有相关视频讲解和日志文件示例。
307 0
|
存储 缓存 Java
一文读懂线程池的实现原理
一文读懂线程池的实现原理
485 0
一文读懂线程池的实现原理
|
编解码 算法 关系型数据库
物理层系统设计架构及关键技术 | 带你读《5G 无线系统设计与国际标准》之六
物理层的设计是整个 5G 系统设计中最核心的部分。相对于 4G,ITU 及 3GPP 对 5G提出了更高而且更全面的关键性能指标要求。其中最具有挑战的峰值速率、频谱效率、用户体验速率、时延等关键指标均需要通过物理层的设计来达成。为迎接这些挑战,5G的新空口设计在充分借鉴 LTE 设计的基础上,也引入了一些全新的设计。
物理层系统设计架构及关键技术 | 带你读《5G 无线系统设计与国际标准》之六
|
前端开发 网络协议 Dubbo
超详细Netty入门,看这篇就够了!
本文主要讲述Netty框架的一些特性以及重要组件,希望看完之后能对Netty框架有一个比较直观的感受,希望能帮助读者快速入门Netty,减少一些弯路。
93114 32
超详细Netty入门,看这篇就够了!
|
消息中间件 SQL 存储
超详细的RabbitMQ入门,看这篇就够了!
RabbitMQ入门,看这篇就够了
219242 69
|
机器学习/深度学习 人工智能 自然语言处理
Hugging Face 的应用
Hugging Face 是一家专注于开发机器学习应用工具的公司,以其用于自然语言处理的 Transformers 库而闻名,同时提供了一个平台让用户分享机器学习模型和数据集。Transformers 库支持多种任务,如文本分类、生成、总结等,并兼容 PyTorch、TensorFlow 等框架。Hugging Face 还推出了 Text Generation Inference 工具包,用于高效部署大规模语言模型。在国内,百度千帆和魔搭社区等平台也在提供类似的服务和支持。
经济生产批量(Economic Production Quantity,EPQ)
经济生产批量(Economic Production Quantity,EPQ)
|
存储 Python
数据类型:计算机科学中的基石
在计算机科学中,数据类型是程序设计的基本组成部分,它决定了如何在计算机内存中存储数据,以及如何对这些数据进行操作。不同的数据类型有不同的存储需求、取值范围以及可进行的操作。了解并正确使用数据类型是编写高效、健壮程序的关键。
462 0

热门文章

最新文章