一、什麼是分佈式
最簡單的理解:多個服務器全部運作起來纔是一整個項目
因此,我們需要將都一些業務分離出去,讓一個服務器完成一個大類的業務邏輯以承受更高的併發。例如簡單的訂單-查詢
訂單表:
物品信息表:
一般實現是直接用聯表查詢都得某一用戶的訂單詳細信息,但現在我們將他拆分爲兩個,一個服務器處理關於訂單的業務邏輯,一個服務器處理物品的業務邏輯,正常項目中肯定沒有這麼簡單,具體怎麼拆分才能達到最好的效果並不是一件容易的事。
二、物品信息服務
在創建的時候先引入Eureka服務,後面需要用到
目錄結構
就只寫一個簡單的查詢物品信息功能
public interface GoodsMapper {
@Select("select * from goods where goods_id = #{id}")
Goods findGoodsByID(@Param("id") int id);
}
@RestController
@RequestMapping("/goods" )
public class GoodsController {
@Autowired
GoodsService goodsService;
@GetMapping("/{id}")
public JSONObject get(@PathVariable("id") int id){
return goodsService.findGoodsByID(id);
}
}
三、訂單服務
同樣先引入Eureka的依賴。
目錄結構
這裏實體類中還有一個Goods是因爲,調用物品服務的接口返回來的是一個json格式,將他轉化便於更好的使用。也是隻寫查詢訂單
@RestController
@RequestMapping("/order" )
public class OrderController {
@Autowired
OrderService orderService;
@GetMapping("/query/{id}")
public JSONObject queryII(@PathVariable("id") int id){
return orderService.queryOrderByUserIDII(id);
}
}
四、訪問服務
單機的時候,直接在order的serviceIml裏面調用goodsMapper就行了,現在分成兩個服務之後怎麼查詢需要的good信息呢?
在物品服務中提供了根據物品id查找其信息的接口,我們只要訪問這個接口就能得到。·使用restTemplate
發起請求並轉換爲Goods類
public class OrderApplication {
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
}
public class OrderServiceImpl implements OrderService {
@Autowired
RestTemplate restTemplate;
@Override
public JSONObject queryOrderByUserIDII(int id) {
List<Order> orders = orderMapper.queryOrderByUserIDII(id);
JSONArray goods = new JSONArray();
for (Order order:orders){
//因爲是本地測試所以訪問的地址是127.0.0.1
String url = "http://127.0.0.1:8000/goods/" + order.getGoods_id();
Goods good =restTemplate.getForObject(url,Goods.class);
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(good);
goods.add(jsonObject);
}
JSONObject returnJsono = new JSONObject();
returnJsono.put("code",200);
returnJsono.put("msg","success");
returnJsono.put("data",goods);
return returnJsono;
}
}
五、總結
這樣業務分離出來了,但有很明顯的問題那就是訪問的URL是一個定值,後面服務器改變或者端口改變,那麼就要返回來修改,要出大問題。下一章Eureka服務註冊中心。