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

目录

一.场景介绍

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

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

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

相关推荐
小江的记录本19 小时前
【Spring全家桶】Spring Cloud 2023.0.x:微服务核心理论、CAP/BASE定理(附《思维导图》+《面试高频考点清单》)
java·spring boot·后端·spring·spring cloud·微服务·面试
Demon1_Coder1 天前
Day4-微服务-Seata默认事务
java·数据库·微服务
huipeng9261 天前
企业级微服务开发实战(二):微服务基础设施搭建与中间件部署
java·redis·mysql·spring cloud·微服务·nacos·rabbitmq
Jabes.yang1 天前
Java电商订单系统面试全流程解析:接口设计、数据库、微服务与分布式事务实战
java·微服务·mybatis·分布式事务·电商·订单系统·接口设计
Jabes.yang1 天前
Java面试实录:AIGC场景下的Stream、微服务、Redis、Kafka与安全实战
java·spring boot·redis·微服务·面试·kafka·aigc
努力搬砖的咸鱼1 天前
容器编排底层原理:Kubernetes 网络模型与 CNI 插件
网络·微服务·云原生·容器·架构·kubernetes
kakawzw2 天前
微服务组件源码2——Spring Ribbon原理(基于RibbonLoadBalancerClient)
java·微服务·ribbon
Demon1_Coder2 天前
Day3-微服务-Sentinel-具体使用
java·微服务·sentinel
qingy_20462 天前
【架构师之路】绪论
微服务·云原生·架构
xingyuzhisuan2 天前
异地多活聚合 API 架构:跨区域故障自动切换落地实践
微服务·云原生·架构