| 架构 | 优点 | 缺点 |
|---|---|---|
| 单体架构 | 架构简单,部署成本低, | 耦合度高(维护困难、升级困难) |
| 分布式架构 | 降低服务耦合,有利于服务升级和拓展 | 服务调用关系错综复杂 |
原则
拆分时机
拆分原则
拆分方法
微服务的拆分应遵循上述拆分时机、拆分原则,并选择合适的拆分方法,逐步拆分,还要从实际业务领域出发,并结合考虑非业务的因素,比如需求变更的频率、高性能、安全性、团队规模以及技术异构等因素
@MapperScan("cn.pj.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();
}
}
@Service
public class OrderService {
@Autowired
private OrderMapper orderMapper;
@Autowired
private RestTemplate restTemplate;
public Order queryOrderById(Long orderId) {
// 1.查询订单
Order order = orderMapper.findById(orderId);
//2.利用 RestTemplate 发起 http 请求,查询用户
//2.1 url路径
String url ="http://localhost:8081/user/"+order.getUserId();
//2.2 发起 http 请求,实现远程调用
User user= restTemplate.getForObject(url, User.class);
//3. 封装 user 到 Order
order.setUser(user);
// 4.返回
return order;
}
}
服务提供者: 一次业务中,被其它微服务调用的服务。(提供接口给其它微服务)
服务消费者: 一次业务中,调用其它微服务的服务。(调用其它微服务提供的接口)

对于A调用B的业务而言:A是服务消费者,B是服务提供者
对于B调用C的业务而言:B是服务消费者,C是服务提供者
因此,服务B既可以是服务提供者,也可以是服务消费者