2.服务拆分和远程调用
2.1服务拆分
cloud-demo:父工程,管理依赖
- order-service:订单微服务,负责订单相关业务
- user-service:用户微服务,负责用户相关业务
实际上order的查询结果中有一个user信息,要获取这个user信息,就必须通过http请求的方式拿到(满足数据库分开,单个模块只负责单一功能原则)

2.2远程调用-RestTemplate
RestTemplate
提供高度封装的接口,可以让我们非常方便地进行 Rest API 调用。
使用RestTemplate
可以进行模块间的远程调用,后面还有更优雅的方式Feign
,这里先讲RestTemplate
.
2.2.1RestTemplate
提供的方法

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