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 API
Spring Boot 3.2 结合 Spring Cloud 微服务架构实操指南 现代分布式应用系统构建实战教程
Spring Boot 3.2 + Spring Cloud 2023.0 微服务架构实践摘要 本文基于Spring Boot 3.2.5和Spring Cloud 2023.0.1最新稳定版本,演示现代微服务架构的构建过程。主要内容包括: 技术栈选择:采用Spring Cloud Netflix Eureka 4.1.0作为服务注册中心,Resilience4j 2.1.0替代Hystrix实现熔断机制,配合OpenFeign和Gateway等组件。 核心实操步骤: 搭建Eureka注册中心服务 构建商品
1318 3
|
8月前
|
监控 Java 数据库
从零学 Dropwizard:手把手搭轻量 Java 微服务,告别 Spring 臃肿
Dropwizard 整合 Jetty、Jersey 等成熟组件,开箱即用,无需复杂配置。轻量高效,启动快,资源占用少,内置监控、健康检查与安全防护,搭配 Docker 部署便捷,是构建生产级 Java 微服务的极简利器。
845 117
|
7月前
|
负载均衡 Java API
《深入理解Spring》Spring Cloud 构建分布式系统的微服务全家桶
Spring Cloud为微服务架构提供一站式解决方案,涵盖服务注册、配置管理、负载均衡、熔断限流等核心功能,助力开发者构建高可用、易扩展的分布式系统,并持续向云原生演进。
|
安全 Java Apache
微服务——SpringBoot使用归纳——Spring Boot中集成 Shiro——Shiro 身份和权限认证
本文介绍了 Apache Shiro 的身份认证与权限认证机制。在身份认证部分,分析了 Shiro 的认证流程,包括应用程序调用 `Subject.login(token)` 方法、SecurityManager 接管认证以及通过 Realm 进行具体的安全验证。权限认证部分阐述了权限(permission)、角色(role)和用户(user)三者的关系,其中用户可拥有多个角色,角色则对应不同的权限组合,例如普通用户仅能查看或添加信息,而管理员可执行所有操作。
640 0
|
安全 Java 数据安全/隐私保护
微服务——SpringBoot使用归纳——Spring Boot中集成 Shiro——Shiro 三大核心组件
本课程介绍如何在Spring Boot中集成Shiro框架,主要讲解Shiro的认证与授权功能。Shiro是一个简单易用的Java安全框架,用于认证、授权、加密和会话管理等。其核心组件包括Subject(认证主体)、SecurityManager(安全管理员)和Realm(域)。Subject负责身份认证,包含Principals(身份)和Credentials(凭证);SecurityManager是架构核心,协调内部组件运作;Realm则是连接Shiro与应用数据的桥梁,用于访问用户账户及权限信息。通过学习,您将掌握Shiro的基本原理及其在项目中的应用。
479 0
|
NoSQL Java 关系型数据库
微服务——SpringBoot使用归纳——Spring Boot 中集成Redis——Redis 介绍
本文介绍在 Spring Boot 中集成 Redis 的方法。Redis 是一种支持多种数据结构的非关系型数据库(NoSQL),具备高并发、高性能和灵活扩展的特点,适用于缓存、实时数据分析等场景。其数据以键值对形式存储,支持字符串、哈希、列表、集合等类型。通过将 Redis 与 Mysql 集群结合使用,可实现数据同步,提升系统稳定性。例如,在网站架构中优先从 Redis 获取数据,故障时回退至 Mysql,确保服务不中断。
457 0
微服务——SpringBoot使用归纳——Spring Boot 中集成Redis——Redis 介绍
|
Java 开发者 微服务
Spring Cloud OpenFeign详解与实践
总结起来说,Spring Cloud OpenFeign提供了一种简单易懂且高效的方式去实现微服务之间通信.它隐藏了许多复杂性,并且允许开发者以声明式方式编写HTTP客户端代码.如果你正在开发基于Spring Cloud 的微服务架构系统,Spring Cloud Open Feign是一个非常好用且强大工具.
828 33
|
消息中间件 存储 Java
微服务——SpringBoot使用归纳——Spring Boot中集成ActiveMQ——ActiveMQ安装
本教程介绍ActiveMQ的安装与基本使用。首先从官网下载apache-activemq-5.15.3版本,解压后即可完成安装,非常便捷。启动时进入解压目录下的bin文件夹,根据系统选择win32或win64,运行activemq.bat启动服务。通过浏览器访问`http://127.0.0.1:8161/admin/`可进入管理界面,默认用户名密码为admin/admin。ActiveMQ支持两种消息模式:点对点(Queue)和发布/订阅(Topic)。前者确保每条消息仅被一个消费者消费,后者允许多个消费者同时接收相同消息。
490 0
微服务——SpringBoot使用归纳——Spring Boot中集成ActiveMQ——ActiveMQ安装

热门文章

最新文章