Springboot多个服务互相调用简单案例

初探微服务之间的调用

服务直接怎么调用:

RPC:
  远程过程调用,像调用本地服务(方法)一样调用服务器的服务
  支持同步、异步调用
  客户端和服务器之间建立TCP连接,可以一次建立一个,也可以多个调用复用一次链接
  RPC数据包小
    protobuf
    thrift
  rpc:编解码,序列化,链接,丢包,协议
  
Rest(Http):
  http请求,支持多种协议和功能
  开发方便成本低
  http数据包大
  java开发:resttemplate或者httpclient

我们这里使用 resttemplate 的方式进行演示

  1. 首先通过视频服务video-service写一个查询方法

    @RestController
    @RequestMapping("/api/v1/video")
    public class VideoController {
    
        @Autowired
        IVideoService videoService;
    
        @RequestMapping("title")
        public Video queryVideoTitleById(String videoId){
            return videoService.queryById(videoId);
        }
    
    }
    
  2. 通过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
    }
    
  3. 在订单服务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;
        }
    
  4. 使用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版权协议,转载请附上原文出处链接和本声明。