写点什么

Feign 入门篇

作者:李子捌
  • 2021 年 12 月 13 日
  • 本文字数:1285 字

    阅读完需:约 4 分钟

Feign入门篇

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,相比之下代码的可读性确实增强了,但是整体性能是有些许下降的。

发布于: 17 小时前阅读数: 6
用户头像

李子捌

关注

华为云享专家 2020.07.20 加入

公众号【李子捌】

评论

发布
暂无评论
Feign入门篇