06-服务拆分-服务远程调用
1.根据订单id查询订单功能
需求:根据订单id查询订单的同时,把订单所属的用户信息一起返回
2.远程调用方式分析:
1.注册RestTemplate
在order-service的OrderApplication中注册RestTemplate
代码:
@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
2.修改order-service中的OrderService的queryOrderById方法:
@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.1url路径
// 2.2发送http请求,实现远程调用
String url = "http://localhost:8081/" + order.getUserId();
User user = restTemplate.getForObject(url, User.class);
// 3.封装user到order里面
order.setUser(user);
// 4.返回
return order;
}
}
3.微服务调用方式
1.基于RestTemplate发起的http请求实现远程调用
2.http请求做远程调用时与语言无关的调用,只要知道对方的ip,端口,接口路径,请求参数即可。
报错:order-service在调用user-service的时候引入了RestTemplate,发送请求的时候请求到不了代码,断点也显示No executable code found at line 19…。
解决:build=》rebuild项目,然后报错了找不到ibatis的annotations的包错误,其实导入了不知道为什么找不到。然后在setting=》maven=》runner里面把Delegate IDE build/run actions to maven勾上了,然后rebuild项目通过了。前端访问order-service也能返回user里面的数据了。