一、服务架构的演变
1、单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署,架构简单,部署成本低,但耦合度高。
2、分布式架构:根据业务功能对系统进行拆分,每个业务模块作为独立项目开发,称为一个服务,降低了服务的耦合度,有利于服务升级拓展,但是服务拆分和治理会出现问题。
3、微服务:一种经过良好设计的分布式架构方案,具有单一职责、面向服务、自治(独立)、隔离性强。
二、微服务技术对比
企业需求:
三、SpringCloud
springCloud是目前国内使用最广泛的微服务框架,集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而提供了良好的开箱即用体验。
四、服务拆分及远程调用
(一)注意事项:
1、不同微服务,不要重复开发相同业务
2、微服务数据独立不要访问其他微服务的数据库
3、微服务可以将自己的业务暴露为接口,供其他微服务使用
五、服务之间发起请求
在初始情况下,查询order和user只能分开查询,在order中可以看到userId
通过order基于userId发起http请求,查询到订单中的用户:
(一)注册RestTemplate(bean)(bean的注入只能放到配置类里面,而带有@SpringBootApplication的启动类也是配置类)
java
/**
* 创建RestTemplate并注入Spring容器
* @return
*/
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
(二)修改orderService
java
@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请求,实现远程调用(原本返回的是json,告诉它我们要User对象类型)
User user = restTemplate.getForObject(url, User.class);
//3 封装user到order
order.setUser(user);
// 4.返回
return order;
}
}
此时我们的order中已经可以请求到用户信息了
六、提供者与消费者
1、服务提供者:一次业务中,被其他服务调用的服务(提供接口给其他服务)
2、服务消费者:一次业务中,调用其他微服务的服务(调用其他微服务提供的接口)
问:A调用B,B调用C,B是什么?一个服务既可以是提供者又可以是消费者。