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


相关文章
|
10月前
|
Cloud Native Serverless API
微服务架构实战指南:从单体应用到云原生的蜕变之路
🌟蒋星熠Jaxonic,代码为舟的星际旅人。深耕微服务架构,擅以DDD拆分服务、构建高可用通信与治理体系。分享从单体到云原生的实战经验,探索技术演进的无限可能。
微服务架构实战指南:从单体应用到云原生的蜕变之路
|
10月前
|
监控 Cloud Native Java
Spring Boot 3.x 微服务架构实战指南
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕Spring Boot 3.x与微服务架构,探索云原生、性能优化与高可用系统设计。以代码为笔,在二进制星河中谱写极客诗篇。关注我,共赴技术星辰大海!(238字)
1431 2
Spring Boot 3.x 微服务架构实战指南
|
10月前
|
负载均衡 Java API
《深入理解Spring》Spring Cloud 构建分布式系统的微服务全家桶
Spring Cloud为微服务架构提供一站式解决方案,涵盖服务注册、配置管理、负载均衡、熔断限流等核心功能,助力开发者构建高可用、易扩展的分布式系统,并持续向云原生演进。
|
10月前
|
XML Java 测试技术
《深入理解Spring》:IoC容器核心原理与实战
Spring IoC通过控制反转与依赖注入实现对象间的解耦,由容器统一管理Bean的生命周期与依赖关系。支持XML、注解和Java配置三种方式,结合作用域、条件化配置与循环依赖处理等机制,提升应用的可维护性与可测试性,是现代Java开发的核心基石。
|
消息中间件 监控 搜索推荐
Spring全家桶--SpringCloud(中级)(三)
Spring全家桶--SpringCloud(中级)(三)
366 0
Spring全家桶--SpringCloud(中级)(三)
|
存储 消息中间件 监控
Spring全家桶--SpringCloud(中级)(二)
Spring全家桶--SpringCloud(中级)(二)
292 0
Spring全家桶--SpringCloud(中级)(二)
|
监控 负载均衡 Java
Spring全家桶--SpringCloud(中级)(一)
Spring全家桶--SpringCloud(中级)(一)
551 0
Spring全家桶--SpringCloud(中级)(一)
|
Java Spring 容器
SpringBoot自动配置的原理是什么?
Spring Boot自动配置核心在于@EnableAutoConfiguration注解,它通过@Import导入配置选择器,加载META-INF/spring.factories中定义的自动配置类。这些类根据@Conditional系列注解判断是否生效。但Spring Boot 3.0后已弃用spring.factories,改用新格式的.imports文件进行配置。
1453 0
|
人工智能 Java 测试技术
Spring Boot 集成 JUnit 单元测试
本文介绍了在Spring Boot中使用JUnit 5进行单元测试的常用方法与技巧,包括添加依赖、编写测试类、使用@SpringBootTest参数、自动装配测试模块(如JSON、MVC、WebFlux、JDBC等),以及@MockBean和@SpyBean的应用。内容实用,适合Java开发者参考学习。
1377 0

热门文章

最新文章