服务拆分—服务远程调用如何操作?一文详解

目录

一.场景介绍

二.如何实现服务远程调用?

1.远古方法(不推荐):使用Spring官方提供RestTemplate

①注入RestTemplate

②在方法中,直接使用RestTemplate,向【菜单微服务】的接口发送请求,获取菜单信息即可

③测试效果

2.主流方法(强烈推荐):OpenFeign

名字的含义

①将【用户微服务】和【菜单微服务】注册到同一个Nacos注册中心

②引入依赖

思考:为啥要引入这两个依赖?

③编写feign接口

④在启动类添加@EnableFeignClients注解

⑤直接注入使用刚才定义的feign接口即可,像本地调用一样自然

⑥测试效果

注意事项


一.场景介绍

现在我们已经将单体项目,拆分成了微服务(比如:用户相关的功能单独放一个项目,菜单相关的功能单独放到一个项目)。

但是此时我们想查询用户信息及该用户拥有的菜单


我们在

  • 用户微服务,可以查看用户信息
  • 菜单微服务,可以查看菜单信息

但是查询用户信息并且要携带该用户的菜单,这就需要将二者融合。但是二者已经拆分成了两个完全独立的项目,如何融合?

答案:服务远程调用。

二.如何实现服务远程调用?

先理解过程:

  • 此时肯定是要在【用户微服务】中,调用【菜单微服务】

因为肯定是先查出来用户,才会有角色ID,才能去查具体有哪些菜单。

1.远古方法(不推荐):使用Spring官方提供RestTemplate

思路:在【用户微服务】中,查询用户信息以后(此时就知道了用户角色ID),那么带着这个角色ID,调用【菜单微服务】,查询该角色ID对应的菜单。

①注入RestTemplate

但是不能直接使用,容易找不到Bean,因此最好在写一下配置类(很简单)

②在方法中,直接使用RestTemplate,向【菜单微服务】的接口发送请求,获取菜单信息即可

③测试效果

因此这种方法,成功实现了服务远程调用。

2.主流方法(强烈推荐):OpenFeign

名字的含义

  • Open (开放/官方)
  • Feign (伪装/假装)

总结一下: 它的名字听起来吓人,但其实很简单,就是在告诉你------"我是 Spring 官方出品的,能让你把远程调用伪装得像本地调用一样简单。"

①将【用户微服务】和【菜单微服务】注册到同一个Nacos注册中心

详见:

如何将你的服务(单体项目)注册到Nacos注册中心?一文讲透-CSDN博客
最终效果:

②引入依赖

XML 复制代码
<!--添加【OpenFeign】的依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
    <version>4.1.2</version>
</dependency>
<!-- Spring Cloud LoadBalancer 依赖 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
    <version>4.1.2</version> <!-- 与你的 Spring Cloud 版本匹配 -->
</dependency>
思考:为啥要引入这两个依赖?
  • loadbalancer:负责根据服务名,去nacos中找到对应的IP
  • openfeign:负责向该IP发送restFul请求(和前端向后端发送请求一样)

③编写feign接口

④在启动类添加@EnableFeignClients注解

⑤直接注入使用刚才定义的feign接口即可,像本地调用一样自然

⑥测试效果

可见此时也成功了。

注意事项

①openFeign接口调用的微服务的名字不能携带下划线_

②要注意openFeign中的请求地址和微服务的接口地址。

以上就是本篇文章的全部内容,喜欢的话可以留个免费的关注呦~~~

相关推荐
蝎子莱莱爱打怪5 天前
XZLL-IM干货系列 04|Netty 长连接实战:Pipeline 怎么排、心跳怎么跳、连接怎么管
后端·微服务·面试
SamDeepThinking6 天前
Java微服务练习方式
java·后端·微服务
米丘9 天前
微前端之 Web Components 完全指南
微服务·html
霸道流氓气质12 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
霸道流氓气质12 天前
Spring Boot 微服务性能优化完全指南
spring boot·微服务·性能优化
地瓜伯伯13 天前
从MESI缓存一致性协议讲透synchronized的底层
java·spring boot·spring·spring cloud·微服务·springcloud
Devin~Y13 天前
大厂 Java 面试实录:从音视频内容社区到 AI RAG 的全链路技术设计
java·spring boot·redis·spring cloud·微服务·kafka·音视频
递归尽头是星辰13 天前
AI 访问数据仓库:从直连到微服务化
数据仓库·人工智能·微服务·dataagent·ai数据治理
就改了13 天前
Windows 环境 SkyWalking 完整实操教程
windows·微服务·skywalking
至乐活着13 天前
Docker Compose多服务编排实战:从零搭建Node.js+MySQL+Redis全栈应用
docker·微服务·devops·容器编排·compose