初探微服务之间的调用
服务直接怎么调用:
RPC:
远程过程调用,像调用本地服务(方法)一样调用服务器的服务
支持同步、异步调用
客户端和服务器之间建立TCP连接,可以一次建立一个,也可以多个调用复用一次链接
RPC数据包小
protobuf
thrift
rpc:编解码,序列化,链接,丢包,协议
Rest(Http):
http请求,支持多种协议和功能
开发方便成本低
http数据包大
java开发:resttemplate或者httpclient
我们这里使用 resttemplate 的方式进行演示
首先通过视频服务video-service写一个查询方法
@RestController @RequestMapping("/api/v1/video") public class VideoController { @Autowired IVideoService videoService; @RequestMapping("title") public Video queryVideoTitleById(String videoId){ return videoService.queryById(videoId); } }通过postMan调用该接口查看是否能获取数据
访问url:
http://localhost:9000/api/v1/video/title?videoId=30返回结果
{ "id": 30, "title": "互联网架构之JAVA虚拟机JVM零基础到高级实战", "summary": "https://xdvideo-file.oss-cn-shenzhen.aliyuncs.com/video/2020/maven/%E8%AF%A6%E6%83%85%E5%9B%BE.png", "coverImg": "https://xdvideo-file.oss-cn-shenzhen.aliyuncs.com/video/2020/maven/%E5%AE%98%E7%BD%91%E4%B8%BB%E5%9B%BE-mawen.png", "price": 3980, "createTime": "2021-06-24", "point": 9.1 }在订单服务order-service中使用RestTemplate方式调用视频服务video-service
先将RestTemplate类注入到spring容器中
@Bean public RestTemplate getRestTemplate(){ return new RestTemplate(); }在controller类中调用如下
@RestController @RequestMapping("/api/v1/order") public class OrderController { @Autowired private RestTemplate restTemplate; @RequestMapping("/OrderInfo") public VideoOrder query(String videoId){ Video video = restTemplate.getForObject("http://localhost:9000/api/v1/video/title?videoId="+videoId,Video.class); VideoOrder videoOrder = new VideoOrder(); assert video != null; videoOrder.setVideoTitle(video.getTitle()); videoOrder.setVideoImg(video.getCoverImg()); videoOrder.setVideoId(video.getId()); return videoOrder; }使用postMan测试订单服务order-service的OrderInfo方法是否能查到视频服务中的数据
访问url:
http://localhost:8000/api/v1/order/OrderInfo?videoId=30返回结果
{ "id": null, "outTradeNo": null, "state": null, "createTime": null, "totalFee": null, "videoId": 30, "videoTitle": "互联网架构之JAVA虚拟机JVM零基础到高级实战", "videoImg": "https://xdvideo-file.oss-cn-shenzhen.aliyuncs.com/video/2020/maven/%E5%AE%98%E7%BD%91%E4%B8%BB%E5%9B%BE-mawen.png", "userId": null }如上所示能获取到数据,说明服务间调用成功了
版权声明:本文为weixin_38560145原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。