《SpringCloud》笔记三:RestTemplate实现服务之间的远程调用

191 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

所有课程的学习及相关资料都是源自b站黑马程序员 感谢黑马程序员给予我们新手的无私帮助,感谢!!! 黑马程序员-----yyds

@[toc]

一、开始

唠叨一句,每个SpringCloud版本其实都对应了一个SpringBoot的版本,所以大家在使用SpringCloud的时候还是需要注意一下自己的SpringBoot版本。 在这里插入图片描述 然后我们再谈谈微服务的服务拆分操作,以前我们写一个后端web项目的时候,所有的业务都是写在一个项目里面的,现在我们模拟两台不同的机器(也就是order-servcieuser-service),也就是拆分出来了两个服务,现在我们要解决的问题是如何让两个服务之间可以互相调用,而且调用的返回数据类型满足我们所需要的数据类型。

那么,在开始本次任务之前,我们需要先说明一下我们的需求:

  • 我们现在有两个模块(order-service模块,代表订单模块,user-service模块,代表用户模块)。
  • 需求是用户通过订单模块,不仅查出订单数据,而且也要一并查出与该订单关联的用户数据 。

在这里插入图片描述

完成上面的叙述,我们再看看我们上次导入的项目内容 先看到order-service这个服务

在这里插入图片描述

很明显order-service里面的这个控制器是可以支持根据id来查询订单的,返回是查询的对象数据,但是由于控制器类型使用的是@RestController,所以返回给浏览器的结果应该是被封装为json数据的对象数据。

打开cmd内的数据库连接

我们运行order-service,在浏览器下输入如下地址进行测试结果

在这里插入图片描述 没有问题,同理我们再测试一下user-service 运行,浏览器输入如下数据

在这里插入图片描述

二、服务远程调用说明

我们的需求如下

在这里插入图片描述 我们再看看我们上次查到的数据里面是否有用户数据

在这里插入图片描述 很明显查出的结果是null,说明并没有查出用户数据。

那么来揪一揪里面的问题:

浏览器为什么可以请求获取到相关的订单数据,因为浏览器给后端服务器发送了一个http请求,那要想订单模块获取到用户模块的数据,我们是不是也可以让订单模块也模拟给用户模块服务器模拟发送http请求呢,这样子是不是就可以解决问题了。

在这里插入图片描述 然后再将获取的数据进行结合是不是就得到了我们想要的结果。

在这里插入图片描述

三、RestTemplate的使用

那么Spring框架也为我们提供了一种发送各种Htpp请求的工具类—— RestTemplate

好的,我们知道使用那个工具之后,就按部就班开始干活吧。

3.1 注册RestTemplate

我们应该在Spring相关的配置文件里面配置RestTemplate,而很明显,通过@SpringBootApplication修饰的类就是一个配置类,而且还是项目的启动类,我们可以在该类里面将RestTemplate注册为一个Bean供Spring管理,到时候我们使用的时候只需要实现自动装配的注解就可以。

很明显,我们现在是order-service模拟给user-service发送http请求,以获取到user的数据。所以我们需要为order-service配置该工具类。

在这里插入图片描述 这样,我们的配置注册任务就完成了。

3.2 RestTemplate发送http请求

进入到OrderService.java类里面,我们需要修改一些代码

在这里插入图片描述 我们再进行如下的操作

在这里插入图片描述 提一句,上面模拟的是对user-service模块的http请求,返回是默认类型是json类型,但是我们需要的是user类型,所以进行了转换。

完成代码的修改,我们重新运行order-service程序 然后打开浏览器, 输入以下URL数据

在这里插入图片描述

可以看到,这次的User属性就不是null了,现在我们就实现了简单的模拟http请求了。

到此为止,我们完成了简单的服务远程调用功能。 共勉

求一键三连、谢谢!