Spring Cloud实战 | 第五篇:Spring Cloud整合OpenFeign实现微服务之间的调用

简介: Spring Cloud实战 | 第五篇:Spring Cloud整合OpenFeign实现微服务之间的调用

一. 前言

微服务实战系列是基于开源微服务项目有来商城微服务框架升级为背景来开展的,本篇则是讲述SpringCloud整合OpenFeign实现微服务之间的相互调用,有兴趣的朋友可以给youlai-mall 个star,非常感谢。


二. 什么是OpenFeign?

想知道什么是OpenFeign,首先要知道何为Feign?


Feign是SpringCloud组件中一个轻量级RESTFul的HTTP客户端。


Feign内置了Ribbon实现客户端请求的负载均衡。但是Feign是不支持Spring MVC注解的,所以便有了OpenFeign,OpenFeign在Feign的基础上支持Spring MVC注解比如 @RequestMapping等。


OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,通过动态代理生成实现类,实现类做负载均衡并调用其他服务。


三. 项目信息

有来商城youlai-mall 项目结构图:

微信图片_20230706141503.png



现在要实现这么个需求,认证中心youlai-auth登录认证时需要调用youlai-admin接口,这个接口在youlai-admin的请求路径是/users/loadUserByUsername。因为牵涉到微服务之间的调用,所以需要引入HTTP客户端,也就是本篇所说的OpenFeign。


其中youlai-admin-api模块作为youlai-admin模块对外提供FeignClient给其他微服务引用,比如此次的youlai-auth,这样做的好处是无需在youlai-auth去写有关于youlai-admin的FeignClient,直接引入youlai-admin-api即可。而把youlai-admin的FeignClient编写交给负责youlai-admin模块的开发人员,就是让更熟悉此模块的人编写其对外开放的FeignClient。


本篇设计的项目模块如下:


工程名 端口 描述

nacos-server 8848 注册中心和配置中心

youlai-auth 8000 API网关

youlai-admin 8080 平台服务

版本声明:


Nacos Server: 1.3.2

SpringBoot: 2.3.3.RELEASE

SpringCloud: Hoxton.SR8

SpringCloud Alibaba: 2.2.1.RELEASE


四. 项目实战

1.youlai-admin


提供接口/users/loadUserByUsername,完整代码下载地址有来商城youlai-mall


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Pg2HkoJM-1602922821474)(https://i.loli.net/2020/09/03/Q6AhpcumiNUOxGK.png)]


2.youlai-admin-api


添加OpenFeign、OkHttp依赖



   org.springframework.cloud

   spring-cloud-starter-openfeign



   io.github.openfeign

   feign-okhttp


1

2

3

4

5

6

7

8

接口FeignClient代码


@FeignClient("youlai-admin")

public interface UmsAdminService {

   @GetMapping("/users/loadUserByUsername")

   UserDTO loadUserByUsername(@RequestParam String username);

}

1

2

3

4

5

3.youlai-auth


添加youlai-admin-api依赖



   com.youlai

   youlai-admin-api

   1.0.0-SNAPSHOT


1

2

3

4

5

配置文件开启OpenFeign使用OkHttp作为底层的client


feign:

 okhttp:

   enabled: true

1

2

3

远程调用代码

微信图片_20230706141510.png



@Autowired

private UmsAdminService umsAdminService;


@GetMapping("/loadUserByUsername")

public Result loadUserByUsername(){

   UserDTO userDTO = umsAdminService.loadUserByUsername("admin");

   return Result.success(userDTO);

}

1

2

3

4

5

6

7

8

4.微服务调用测试


依次启动项目nacos-server,youlai-auth,youlai-admin,使用接口测试工具测试接口http://localhost:8000/oauth/loadUserByUsername

微信图片_20230706141531.png



5.OpenFeign底层httpclient选择:HttpURLConnection、feign-httpclient、feign-okhttp?


HttpURLConnection是JDK默认的,出于性能考虑一般是不可取的。至于其他支持的HC选择,来一波测试数据吧


添加依赖,公平起见引入都是最新版本feign-okhttp和feign-httpclient



   io.github.openfeign

   feign-okhttp

   11.0



   io.github.openfeign

   feign-httpclient

   11.0


1

2

3

4

5

6

7

8

9

10

配置信息,两个都为false则默认使用的是HttpURLConnection,开启一方另一方选择关闭。


feign:

 httpclient:

   enabled: false

 okhttp:

   enabled: false

1

2

3

4

5

修改配置后重启youlai-auth进行测试,我这里是单次单次的请求测试,没有模拟高并发的环境去测试。(单位:ms)


次数 HttpURLConnection feign-httpclient feign-okhttp

1 17.79 18.97 16.39

2 18.02 17.45 16.96

3 16.67 16.25 16.27

4 16.65 17.28 14.79

5 23.03 17.62 15.06

6 16.37 16.80 15.14

7 17.01 18.51 15.71

8 16.15 17.12 14.93

9 16.86 16.79 15.76

10 16.28 17.26 15.05

由数据可大概了解到在单次请求测试下,HttpURLConnection和feign-httpclient相差无几,但是feign-okhttp却有着相较于其他两者有着些许的性能优势。所以我最后选择了feign-okhttp,这里只是给大家做个参照。


五. 结语

至此SpringCloud整合OpenFeign实现微服务之间的相互调用已经完成。还有至于OpenFeign为什么选择使用OkHttp作为底层的client给大家做个测试参考。熟悉如何使用OpenFeign去完成微服务之间的调用在后续的工作中是必要的。


源码地址:youlai-mall


相关文章
|
4月前
|
算法 Java 微服务
【SpringCloud(1)】初识微服务架构:创建一个简单的微服务;java与Spring与微服务;初入RestTemplate
微服务架构是What?? 微服务架构是一种架构模式,它提出将单一应用程序划分为一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。 每个服务允许在其独立的进程中,服务于服务间采用轻量级的通信机制互相协作(通常是Http协议的RESTful API或RPC协议)。 每个服务都围绕着具体业务进行构建,并且能够被独立的部署到生产环境、类生产环境等。另外应当尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据上下文,选择合适的语言、工具对其进行构建
559 126
|
4月前
|
负载均衡 算法 Java
【SpringCloud(2)】微服务注册中心:Eureka、Zookeeper;CAP分析;服务注册与服务发现;单机/集群部署Eureka;连接注册中心
1. 什么是服务治理? SpringCloud封装了Netfix开发的Eureka模块来实现服务治理 在传统pc的远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所以需要使用服务治理,管理服务于服务之间依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册
356 0
|
4月前
|
XML Java 测试技术
《深入理解Spring》:IoC容器核心原理与实战
Spring IoC通过控制反转与依赖注入实现对象间的解耦,由容器统一管理Bean的生命周期与依赖关系。支持XML、注解和Java配置三种方式,结合作用域、条件化配置与循环依赖处理等机制,提升应用的可维护性与可测试性,是现代Java开发的核心基石。
|
4月前
|
负载均衡 Java API
《深入理解Spring》Spring Cloud 构建分布式系统的微服务全家桶
Spring Cloud为微服务架构提供一站式解决方案,涵盖服务注册、配置管理、负载均衡、熔断限流等核心功能,助力开发者构建高可用、易扩展的分布式系统,并持续向云原生演进。
|
7月前
|
Java Spring 容器
SpringBoot自动配置的原理是什么?
Spring Boot自动配置核心在于@EnableAutoConfiguration注解,它通过@Import导入配置选择器,加载META-INF/spring.factories中定义的自动配置类。这些类根据@Conditional系列注解判断是否生效。但Spring Boot 3.0后已弃用spring.factories,改用新格式的.imports文件进行配置。
1177 0
|
8月前
|
人工智能 Java 测试技术
Spring Boot 集成 JUnit 单元测试
本文介绍了在Spring Boot中使用JUnit 5进行单元测试的常用方法与技巧,包括添加依赖、编写测试类、使用@SpringBootTest参数、自动装配测试模块(如JSON、MVC、WebFlux、JDBC等),以及@MockBean和@SpyBean的应用。内容实用,适合Java开发者参考学习。
952 0
|
4月前
|
JavaScript Java Maven
【SpringBoot(二)】带你认识Yaml配置文件类型、SpringMVC的资源访问路径 和 静态资源配置的原理!
SpringBoot专栏第二章,从本章开始正式进入SpringBoot的WEB阶段开发,本章先带你认识yaml配置文件和资源的路径配置原理,以方便在后面的文章中打下基础
470 3
|
4月前
|
Java 测试技术 数据库连接
【SpringBoot(四)】还不懂文件上传?JUnit使用?本文带你了解SpringBoot的文件上传、异常处理、组件注入等知识!并且带你领悟JUnit单元测试的使用!
Spring专栏第四章,本文带你上手 SpringBoot 的文件上传、异常处理、组件注入等功能 并且为你演示Junit5的基础上手体验
994 2
|
11月前
|
前端开发 Java 数据库
微服务——SpringBoot使用归纳——Spring Boot集成Thymeleaf模板引擎——Thymeleaf 介绍
本课介绍Spring Boot集成Thymeleaf模板引擎。Thymeleaf是一款现代服务器端Java模板引擎,支持Web和独立环境,可实现自然模板开发,便于团队协作。与传统JSP不同,Thymeleaf模板可以直接在浏览器中打开,方便前端人员查看静态原型。通过在HTML标签中添加扩展属性(如`th:text`),Thymeleaf能够在服务运行时动态替换内容,展示数据库中的数据,同时兼容静态页面展示,为开发带来灵活性和便利性。
476 0

热门文章

最新文章