使用起因
之前我们完成了拆分购物车模块,但当我们进行测试查询时: 我们注意到,其中与商品有关的几个字段中:最新状态和库存为默认值,最新价格为空!这就是因为我们注释掉了查询购物车时,查询商品信息的相关代码。
那么,我们该如何在购物车服务中实现对商品服务的查询呢?
RestTemplate
Spring给我们提供了一个RestTemplate的API,可以方便的实现Http请求的发送。
同步客户端执行HTTP请求,在底层HTTP客户端库(如JDK HttpURLConnection、Apache HttpComponents等)上公开一个简单的模板方法API。RestTemplate通过HTTP方法为常见场景提供了模板,此外还提供了支持不太常见情况的通用交换和执行方法。 RestTemplate通常用作共享组件。然而,它的配置不支持并发修改,因此它的配置通常是在启动时准备的。
其中提供了大量的方法,方便我们发送Http请求,例如
远程调用
接下来,我们修改cart-service中的中com.hmall.cart.service.impl.CartServiceImpl的handleCartItems方法,发送http请求到item-service:
可以看到,利用RestTemplate发送http请求与前端ajax发送请求非常相似,都包含四部分信息:
① 请求方式
② 请求路径
③ 请求参数
④ 返回值类型
最后重启cart-service,再次查询购物车接口文档:
可以看到,所有商品相关数据都已经查询到了
在这个过程中,item-service提供了查询接口,cart-service利用Http请求调用该接口。因此item-service可以称为服务的提供者,而cart-service则称为服务的消费者或服务调用者。