【SpringCloud】簡單應用(一)——業務分離

一、什麼是分佈式

  最簡單的理解:多個服務器全部運作起來纔是一整個項目
  因此,我們需要將都一些業務分離出去,讓一個服務器完成一個大類的業務邏輯以承受更高的併發。例如簡單的訂單-查詢
訂單表:
在這裏插入圖片描述
物品信息表:
在這裏插入圖片描述
  一般實現是直接用聯表查詢都得某一用戶的訂單詳細信息,但現在我們將他拆分爲兩個,一個服務器處理關於訂單的業務邏輯,一個服務器處理物品的業務邏輯,正常項目中肯定沒有這麼簡單,具體怎麼拆分才能達到最好的效果並不是一件容易的事。

二、物品信息服務

在創建的時候先引入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服務註冊中心。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章