SpringCloud学习笔记(二)服务拆分和远程调用

2.服务拆分和远程调用

2.1服务拆分

cloud-demo:父工程,管理依赖

  • order-service:订单微服务,负责订单相关业务
  • user-service:用户微服务,负责用户相关业务

实际上order的查询结果中有一个user信息,要获取这个user信息,就必须通过http请求的方式拿到(满足数据库分开,单个模块只负责单一功能原则)

202304012146979

2.2远程调用-RestTemplate

RestTemplate提供高度封装的接口,可以让我们非常方便地进行 Rest API 调用。

使用RestTemplate可以进行模块间的远程调用,后面还有更优雅的方式Feign,这里先讲RestTemplate.

2.2.1RestTemplate提供的方法

img

2.2.2使用步骤:

1. 注册RestTemplate到spring容器
 @MapperScan("cn.itcast.order.mapper")
 @SpringBootApplication
 public class OrderApplication {
 ​
     public static void main(String[] args) {
         SpringApplication.run(OrderApplication.class, args);
     }
 ​
     //用于使用http请求调用其他模块的接口,写哪都行,注册到IoC里就成了
     @Bean
     public RestTemplate restTemplate(){
         return new RestTemplate();
     }
 }
2. 使用RestTemplate请求url获取资源
 @Service
 public class OrderService {
 ​
     @Autowired
     private OrderMapper orderMapper;
 ​
     @Autowired
     private RestTemplate restTemplate;
 ​
     public Order queryOrderById(Long orderId) {
         // 1.查询订单
         Order order = orderMapper.findById(orderId);
         //2.请求user模块的数据
         String url= "http://localhost:8081/user/"+order.getUserId();
         User user = restTemplate.getForObject(url, User.class);
         //3.设置给order
         order.setUser(user);
         // 4.返回
         return order;
     }
 }

2.2.3 提供者与消费者

在服务调用关系中,会有两个不同的角色:

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

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

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注