二、订单与商品服务分离
这里需要将订单与商品服务独立布置在两台服务器上,我们可以通过分模块单独运行来模拟。
拆分商品服务:
在mall下新建goods-server模块,复制mall中与商品相关的代码:
- pom.xml中中的内容;
- GoodService、GoodsMapper、Goods、GoodsController的代码;
- application.properties内容。
给GoodsServerApplication添加@MapperScan(“com.mujio.*.mapper”)
修改application.properties开放端口为8000:
启动GoodsServerApplication,并打开http://localhost:8000/goods/1测试:
商品服务拆分完成。
拆分订单服务:
在mall下新建order-server模块,复制mall中与订单相关的代码:
- pom.xml中中的内容
- OrderController、OrderService、ConnMapper、OrderMapper、Conn、Goods、Order的代码;
- application.properties内容。
这里需要注意的是,订单服务中仍需要部分商品服务的代码。
给OrderServerApplication添加@MapperScan(“com.mujio.*.mapper”):
修改application.properties开放端口为9000:
接下来,开始改造一直报红的GoodService的代码。现在订单与商品分开了,但是订单服务需要从商品服务中获取具体商品信息,这里我们可以利用RestTemplate从指定的接口获取数据:
首先需要在启动类中引入RestTemplate:
接着在GoodService的代码可以改为:
最后修改OrderService,原本的项目中可以直接利用GoodsMapper来获取信息,现在只能通过GoodService来获取了:
访问:http://localhost:9000/order/1可以获取到相关信息:
但是如果此时商品服务宕机了,我们的订单服务就会报错:
但是这个时候的订单信息除了商品信息获取不到其他信息应当是正常的。所以我们需要进一步修改代码以保证订单其他信息正常,这里可以选择修改GoodService,造一条商品服务异常时的替代信息:
这样我们完成了订单和商品的服务分离。但是这样还是不能有效提高系统的可靠性,单台的服务宕机,整个系统都受到影响。所以我们需要开启多台服务,来保证其中一部分不能提供服务时,还有其他的可以。下一节,我们将利用eureka来实现多台服务的“并联”。