服务拆分及远程调用
服务拆分
注意事项
- 不同微服务,不要重复开发相同业务
- 微服务数据独立,不要访问其他微服务的数据库
- 微服务可以将自己的业务暴露为借口,供其他微服务调用
示例代码
新建两个数据库并导入数据表
- cloud_user
- cloud_order
启动服务
接口测试
服务远程调用
案例:根据订单id查询订单功能
需求:根据订单id查询订单的同时,把订单所属的用户信息一起返回
实现思路:基于RestTemplate发起HTTP请求实现远程调用
实现代码
java
package cn.itcast.order.service;
import cn.itcast.order.mapper.OrderMapper;
import cn.itcast.order.pojo.Order;
import cn.itcast.order.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.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. 查询用户
String url = "http://127.0.0.1:8081/user/" + order.getUserId();
User user = restTemplate.getForObject(url, User.class);
// 3. 设置用户字段数据
order.setUser(user);
// 4.返回
return order;
}
}
提供者和消费者
- 提供者:提供接口给其他微服务
- 消费者:调用其他微服务提供的接口
一个服务既可以是提供者,也可以是消费者