二、訂單與商品服務分離
這裏需要將訂單與商品服務獨立佈置在兩臺服務器上,我們可以通過分模塊單獨運行來模擬。
拆分商品服務:
在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來實現多臺服務的“並聯”。