文章目录
服务拆分及注意事项
每个服务有独立的数据库,订单模块需要查询用户信息时,通过调用用户模块的接口,自身的数据库并没有用户信息。
服务拆分案例
案例结构
案例有2个微服务,order-service微服务对应的表为cloud-order,user-service微服务对应的表为cloud-user。在实际生产部署时,这两个表会被放在不同的数据库中,没有办法做关联查询。
需求:根据订单id查询订单的同时,把订单所属的用户信息一起返回
案例代码分析
- 配置类
java
/**
* @SpringBootConfiguration继承自@Configuration,
* 二者功能也一致,标注当前类是配置类,并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到spring容器中
*/
@SpringBootConfiguration
public class WebConfiguration {
@Bean //相当于@Controller,@Service等
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
- OrderService类
java
@Service
public class OrderService {
@Autowired
private OrderMapper orderMapper;
// 获取restTemplate对象
@Autowired
private RestTemplate restTemplate;
public Order queryOrderById(Long orderId) {
// 1.查询订单
Order order = orderMapper.findById(orderId);
// 2.定义url
String url = "http://localhost:8081/user/"+order.getUserId();
// 3.发送http请求
User user = restTemplate.getForObject(url, User.class);
// 4.封装user
order.setUser(user);
// 5.返回
return order;
}
}
- 测试