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


相关文章
|
21小时前
|
Java 应用服务中间件 测试技术
深入探索Spring Boot Web应用源码及实战应用
【5月更文挑战第11天】本文将详细解析Spring Boot Web应用的源码架构,并通过一个实际案例,展示如何构建一个基于Spring Boot的Web应用。本文旨在帮助读者更好地理解Spring Boot的内部工作机制,以及如何利用这些机制优化自己的Web应用开发。
16 3
|
21小时前
|
安全 Java 开发者
深入理解Spring Boot配置绑定及其实战应用
【4月更文挑战第10天】本文详细探讨了Spring Boot中配置绑定的核心概念,并结合实战示例,展示了如何在项目中有效地使用这些技术来管理和绑定配置属性。
11 1
|
21小时前
|
安全 Java 测试技术
Spring Boot集成支付宝支付:概念与实战
【4月更文挑战第29天】在电子商务和在线业务应用中,集成有效且安全的支付解决方案是至关重要的。支付宝作为中国领先的支付服务提供商,其支付功能的集成可以显著提升用户体验。本篇博客将详细介绍如何在Spring Boot应用中集成支付宝支付功能,并提供一个实战示例。
37 2
|
21小时前
|
Java 关系型数据库 数据库
Spring Boot多数据源及事务管理:概念与实战
【4月更文挑战第29天】在复杂的企业级应用中,经常需要访问和管理多个数据源。Spring Boot通过灵活的配置和强大的框架支持,可以轻松实现多数据源的整合及事务管理。本篇博客将探讨如何在Spring Boot中配置多数据源,并详细介绍事务管理的策略和实践。
38 3
|
21小时前
|
开发框架 监控 Java
深入探索Spring Boot的监控、管理和测试功能及实战应用
【5月更文挑战第14天】Spring Boot是一个快速开发框架,提供了一系列的功能模块,包括监控、管理和测试等。本文将深入探讨Spring Boot中监控、管理和测试功能的原理与应用,并提供实际应用场景的示例。
14 2
|
21小时前
|
监控 安全 Java
Spring cloud原理详解
Spring cloud原理详解
17 0
|
21小时前
|
Java Spring 容器
深入理解Spring Boot启动流程及其实战应用
【5月更文挑战第9天】本文详细解析了Spring Boot启动流程的概念和关键步骤,并结合实战示例,展示了如何在实际开发中运用这些知识。
17 2
|
21小时前
|
JavaScript Java 开发者
Spring Boot中的@Lazy注解:概念及实战应用
【4月更文挑战第7天】在Spring Framework中,@Lazy注解是一个非常有用的特性,它允许开发者控制Spring容器的bean初始化时机。本文将详细介绍@Lazy注解的概念,并通过一个实际的例子展示如何在Spring Boot应用中使用它。
21 2
|
21小时前
|
消息中间件 负载均衡 Java
【Spring Cloud 初探幽】
【Spring Cloud 初探幽】
16 1
|
21小时前
|
安全 Java Docker