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

目录

一.场景介绍

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

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

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

相关推荐
剩下了什么2 小时前
微服务入门介绍
微服务·云原生·架构
Sam_Deep_Thinking2 小时前
适合中小型企业的出口入口网关微服务
java·微服务·架构
.柒宇.3 小时前
SpringCloud微服务入门教程
spring·spring cloud·微服务
喜欢流萤吖~17 小时前
服务间的依赖管理:微服务的协作之道
java·微服务
LSL666_21 小时前
微服务架构
微服务·云原生·架构
威迪斯特21 小时前
GoFr框架:加速微服务开发的Go语言利器
开发语言·后端·微服务·架构·golang·命令行框架·gofr框架
大龄码农-涵哥1 天前
Spring Cloud微服务架构详解:从服务注册到配置中心,阿里面试核心知识点
spring cloud·微服务·架构
LSL666_1 天前
微服务架构——有关概念
微服务·云原生·架构
小江的记录本1 天前
【微服务与云原生架构】Serverless架构、FaaS/BaaS、核心原理、优缺点
java·后端·微服务·云原生·架构·系统架构·serverless