之前的视频服务测试数据库已经连通,现在测试从订单服务(order)来调用视频服务的接口。
    将视频服务先启动起来。然后在订单服务中添加启动类:
    image.png

    1. import org.springframework.boot.SpringApplication;
    2. import org.springframework.boot.autoconfigure.SpringBootApplication;
    3. import org.springframework.context.annotation.Bean;
    4. import org.springframework.web.client.RestTemplate;
    5. @SpringBootApplication
    6. public class OrderApplication {
    7. public static void main(String[] args) {
    8. SpringApplication.run(OrderApplication.class, args);
    9. }
    10. //此处注入RestTemplate,用于网络请求使用
    11. @Bean
    12. public RestTemplate getRestTemplate(){
    13. return new RestTemplate();
    14. }
    15. }

    添加订单服务的Controller:
    image.png

    1. import com.study.pojo.Video;
    2. import com.study.pojo.VideoOrder;
    3. import org.springframework.beans.factory.annotation.Autowired;
    4. import org.springframework.web.bind.annotation.GetMapping;
    5. import org.springframework.web.bind.annotation.RequestMapping;
    6. import org.springframework.web.bind.annotation.RestController;
    7. import org.springframework.web.client.RestTemplate;
    8. @RestController
    9. @RequestMapping("/api/v1/video_order")
    10. public class OrderController {
    11. @Autowired
    12. private RestTemplate restTemplate;
    13. @GetMapping("/save")
    14. public Object save(int videoId){
    15. //初步的,通过网络请求访问视频服务
    16. Video video = restTemplate.getForObject("http://localhost:9000/api/v1/video/find_by_id?videoId=" + videoId, Video.class);
    17. VideoOrder videoOrder = new VideoOrder();
    18. videoOrder.setVideoId(videoId);
    19. videoOrder.setVideoTitle(video.getTitle());
    20. videoOrder.setCreateTime(video.getCreateTime());
    21. return videoOrder;
    22. }
    23. }

    将订单服务也启动起来,然后访问订单服务:

    1. http://localhost:8000/api/v1/video_order/save?videoId=40
    2. //访问过程
    3. 通过访问订单服务的save接口,来调用视频服务的find_by_id接口,然后查询数据库数据,返回结果。

    存在的问题:

    • 服务之间的IP信息写死
    • 服务之间无法提供负载均衡
    • 多个服务直接关系调用维护复杂