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

目录

一.场景介绍

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

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中的请求地址和微服务的接口地址。

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

相关推荐
r_oo_ki_e_1 天前
java微服务
java·微服务
小森林之主2 天前
Docker Compose 紧急救援:凌晨3点服务器报警的解决方案
docker·微服务·容器化·docker compose·故障排除
L-影2 天前
单体与微服务区别
微服务·云原生·架构
cfm_29142 天前
Nacos零基础入门实战
微服务
Swift社区2 天前
AI 为什么越来越像微服务?
人工智能·微服务·架构
rebibabo3 天前
Java进阶(1) | 微服务入门:从单体到 Spring Cloud 全家桶
spring cloud·微服务·nacos·openfeign·服务注册与发现·java进阶·单体架构
一路向北North4 天前
Spring Security OAuth2.0(23):分布式系统授权-转发明文给微服务
java·spring·微服务
Wang's Blog4 天前
Go-Zero进阶实战2: 使用 Docker Compose 编排与部署微服务
docker·微服务·golang
xexpertS4 天前
可用区静态稳定性架构:如何提升云服务高可用性
微服务
invicinble4 天前
关于微服务基本框架搭建--fegin最小使用demo
java·spring boot·微服务