服务拆分及远程调用

一、微服务拆分注意事项:

1、不同微服务:不能重复相关业务

2、微服务数据独立:不要访问其它微服务的数据库,有自己独立的数据库

3、微服务可以将自己的业务暴露为接口,供其它微服务调用

 

二、微服务远程调用

案例:两个服务各自提供两个功能:根据订单id查询订单功能,根据用户id查询用户信息

需求:根据订单id查询订单的同时,把订单所属的用户信息一起返回。

远程调用方式:

基于RedisTemplate发起的http请求实现远程调用。

具体实现:根据user服务暴露的接口,发起http请求用户信息。

package cn.itcast.order;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
public class OrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }

    /**
     * 创建RestTemplate并注入spring容器
     * @return
     */
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

 

package cn.itcast.order.web;

import cn.itcast.order.pojo.Order;
import cn.itcast.order.pojo.User;
import cn.itcast.order.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
@RequestMapping("order")
public class OrderController {

   @Autowired
   private OrderService orderService;

   @Autowired
   private RestTemplate restTemplate;

    @GetMapping("{orderId}")
    public Order queryOrderByUserId(@PathVariable("orderId") Long orderId) {
        //1、根据id查询订单并返回
        Order order = orderService.queryOrderById(orderId);

        //2、利用RestTemplate发起http请求,查询用户
        String url = "http://localhost:8081/user/" + order.getUserId();
        User user = restTemplate.getForObject(url, User.class);
        //3、封装user到Order
        order.setUser(user);
        return order;
    }
}

 

2、提供者与消费者

* 服务提供者:一次业务中,被其它微服务调用的服务。(提供接口给其它微服务)

* 服务消费者:一次业务中,调用其它微服务的服务。(调用其它微服务提供的接口)

一个服务既可以是提供者,又可以是消费者。

posted @ 2023-06-19 21:42  佛系粥米  阅读(15)  评论(0编辑  收藏  举报