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

目录

一.场景介绍

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

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

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

相关推荐
EatFan4 小时前
gRPC 为什么比 HTTP+JSON 快?详细讲解gRPC
后端·微服务·grpc
辛迪聊物业数字化1 天前
智慧物业管理平台架构实践:从SaaS物业云到商管系统的全模块落地
大数据·微服务·php
叶总没有会1 天前
Nacos—注册中心
spring cloud·微服务
天天喝旺仔1 天前
分布式服务容错实战:用 Sentinel 实现限流、熔断与降级
分布式·微服务·云原生·sentinel
周先生FullStack2 天前
Mac + 容器本地 MySQL/Redis 环境搭建与网络原理实战
java·spring boot·微服务·容器·架构·个人开发
叶总没有会2 天前
微服务--分布式基础
java·spring·spring cloud·微服务
weixin_435247062 天前
微服务开发规范模版
微服务·云原生
智慧物业老杨3 天前
物业数字化落地思考:真正的转型,是底层数据秩序的重构
java·大数据·人工智能·微服务·系统架构
VortMall3 天前
VortMall微服务商城系统 v1.3.20 正式发布:分销客户管理与后台安全双升级
微服务·商城系统·开源商城系统
骇客野人3 天前
Java 前后端可部署落地架构方案
服务器·前端·微服务