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


相关文章
|
9月前
|
算法 Java 微服务
【SpringCloud(1)】初识微服务架构:创建一个简单的微服务;java与Spring与微服务;初入RestTemplate
微服务架构是What?? 微服务架构是一种架构模式,它提出将单一应用程序划分为一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。 每个服务允许在其独立的进程中,服务于服务间采用轻量级的通信机制互相协作(通常是Http协议的RESTful API或RPC协议)。 每个服务都围绕着具体业务进行构建,并且能够被独立的部署到生产环境、类生产环境等。另外应当尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据上下文,选择合适的语言、工具对其进行构建
719 126
|
9月前
|
负载均衡 算法 Java
【SpringCloud(2)】微服务注册中心:Eureka、Zookeeper;CAP分析;服务注册与服务发现;单机/集群部署Eureka;连接注册中心
1. 什么是服务治理? SpringCloud封装了Netfix开发的Eureka模块来实现服务治理 在传统pc的远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所以需要使用服务治理,管理服务于服务之间依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册
485 0
|
10月前
|
负载均衡 监控 Java
Spring Cloud Gateway 全解析:路由配置、断言规则与过滤器实战指南
本文详细介绍了 Spring Cloud Gateway 的核心功能与实践配置。首先讲解了网关模块的创建流程,包括依赖引入(gateway、nacos 服务发现、负载均衡)、端口与服务发现配置,以及路由规则的设置(需注意路径前缀重复与优先级 order)。接着深入解析路由断言,涵盖 After、Before、Path 等 12 种内置断言的参数、作用及配置示例,并说明了自定义断言的实现方法。随后重点阐述过滤器机制,区分路由过滤器(如 AddRequestHeader、RewritePath、RequestRateLimiter 等)与全局过滤器的作用范围与配置方式,提
Spring Cloud Gateway 全解析:路由配置、断言规则与过滤器实战指南
|
9月前
|
监控 Cloud Native Java
Spring Boot 3.x 微服务架构实战指南
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕Spring Boot 3.x与微服务架构,探索云原生、性能优化与高可用系统设计。以代码为笔,在二进制星河中谱写极客诗篇。关注我,共赴技术星辰大海!(238字)
1384 2
Spring Boot 3.x 微服务架构实战指南
|
9月前
|
负载均衡 Java API
《深入理解Spring》Spring Cloud 构建分布式系统的微服务全家桶
Spring Cloud为微服务架构提供一站式解决方案,涵盖服务注册、配置管理、负载均衡、熔断限流等核心功能,助力开发者构建高可用、易扩展的分布式系统,并持续向云原生演进。
|
9月前
|
XML Java 测试技术
《深入理解Spring》:IoC容器核心原理与实战
Spring IoC通过控制反转与依赖注入实现对象间的解耦,由容器统一管理Bean的生命周期与依赖关系。支持XML、注解和Java配置三种方式,结合作用域、条件化配置与循环依赖处理等机制,提升应用的可维护性与可测试性,是现代Java开发的核心基石。
|
10月前
|
监控 安全 Java
Spring Cloud 微服务治理技术详解与实践指南
本文档全面介绍 Spring Cloud 微服务治理框架的核心组件、架构设计和实践应用。作为 Spring 生态系统中构建分布式系统的标准工具箱,Spring Cloud 提供了一套完整的微服务解决方案,涵盖服务发现、配置管理、负载均衡、熔断器等关键功能。本文将深入探讨其核心组件的工作原理、集成方式以及在实际项目中的最佳实践,帮助开发者构建高可用、可扩展的分布式系统。
595 1
|
10月前
|
jenkins Java 持续交付
使用 Jenkins 和 Spring Cloud 自动化微服务部署
随着单体应用逐渐被微服务架构取代,企业对快速发布、可扩展性和高可用性的需求日益增长。Jenkins 作为领先的持续集成与部署工具,结合 Spring Cloud 提供的云原生解决方案,能够有效简化微服务的开发、测试与部署流程。本文介绍了如何通过 Jenkins 实现微服务的自动化构建与部署,并结合 Spring Cloud 的配置管理、服务发现等功能,打造高效、稳定的微服务交付流程。
1104 0
使用 Jenkins 和 Spring Cloud 自动化微服务部署
|
11月前
|
人工智能 监控 安全
如何快速上手【Spring AOP】?核心应用实战(上篇)
哈喽大家好吖~欢迎来到Spring AOP系列教程的上篇 - 应用篇。在本篇,我们将专注于Spring AOP的实际应用,通过具体的代码示例和场景分析,帮助大家掌握AOP的使用方法和技巧。而在后续的下篇中,我们将深入探讨Spring AOP的实现原理和底层机制。 AOP(Aspect-Oriented Programming,面向切面编程)是Spring框架中的核心特性之一,它能够帮助我们解决横切关注点(如日志记录、性能统计、安全控制、事务管理等)的问题,提高代码的模块化程度和复用性。

热门文章

最新文章