目录
1.远古方法(不推荐):使用Spring官方提供RestTemplate
②在方法中,直接使用RestTemplate,向【菜单微服务】的接口发送请求,获取菜单信息即可
①将【用户微服务】和【菜单微服务】注册到同一个Nacos注册中心
⑤直接注入使用刚才定义的feign接口即可,像本地调用一样自然
一.场景介绍
现在我们已经将单体项目,拆分成了微服务(比如:用户相关的功能单独放一个项目,菜单相关的功能单独放到一个项目)。
但是此时我们想查询用户信息及该用户拥有的菜单
我们在
- 用户微服务,可以查看用户信息
- 菜单微服务,可以查看菜单信息
但是查询用户信息并且要携带该用户的菜单,这就需要将二者融合。但是二者已经拆分成了两个完全独立的项目,如何融合?
答案:服务远程调用。
二.如何实现服务远程调用?
先理解过程:
- 此时肯定是要在【用户微服务】中,调用【菜单微服务】
因为肯定是先查出来用户,才会有角色ID,才能去查具体有哪些菜单。
1.远古方法(不推荐):使用Spring官方提供RestTemplate
思路:在【用户微服务】中,查询用户信息以后(此时就知道了用户角色ID),那么带着这个角色ID,调用【菜单微服务】,查询该角色ID对应的菜单。
①注入RestTemplate

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

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

③测试效果

因此这种方法,成功实现了服务远程调用。
2.主流方法(强烈推荐):OpenFeign
名字的含义
- Open (开放/官方)
- Feign (伪装/假装)
总结一下: 它的名字听起来吓人,但其实很简单,就是在告诉你------"我是 Spring 官方出品的,能让你把远程调用伪装得像本地调用一样简单。"
①将【用户微服务】和【菜单微服务】注册到同一个Nacos注册中心
详见:

②引入依赖
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中的请求地址和微服务的接口地址。
以上就是本篇文章的全部内容,喜欢的话可以留个免费的关注呦~~~




