品優購專案記錄:day01
今日目標:
(1)瞭解電商行業特點以及理解電商的模式
(2)瞭解整體品優購的架構特點
(3)能夠運用Dubbox + SSM 搭建分散式應用
(4)搭建工程框架,完成品牌列表的後端程式碼
目錄
1、系統架構
1.1 SOA 架構
SOA是Service-Oriented Architecture的首字母簡稱,它是一種支援面向服務的架構樣式。從服務、基於服務開發和服務的結果來看,面向服務是一種思考方式。其實SOA架構更多應用於網際網路專案開發。
1.2 品優購架構
1.3 資料表
表名稱 |
含義 |
tb_brand |
品牌 |
tb_specification |
規格 |
tb_specification_option |
規格選項 |
tb_type_template |
型別模板:用於關聯品牌和規格 |
tb_item_cat |
商品分類 |
tb_seller |
商家 |
tb_goods |
商品 |
tb_goods_desc |
商品詳情 |
tb_item |
商品明細 |
tb_content |
內容(廣告) |
tb_content_category |
內容(廣告)型別 |
tb_user |
使用者 |
tb_order |
訂單 |
tb_order_item |
訂單明細 |
tb_pay_log |
支付日誌 |
1.4 框架組合
品優購採用當前流行的前後端程式設計架構。
後端框架採用Spring+SpringMVC+mybatis +Dubbox 。前端採用angularJS +Bootstrap。
2、Dubbox
2.1 Dubbox 架構圖
節點角色說明:
Provider: 暴露服務的服務提供方。
Consumer: 呼叫遠端服務的服務消費方。
Registry: 服務註冊與發現的註冊中心。
Monitor: 統計服務的呼叫次調和呼叫時間的監控中心。
Container: 服務執行容器。
呼叫關係說明:
0. 服務容器負責啟動,載入,執行服務提供者。
1. 服務提供者在啟動時,向註冊中心註冊自己提供的服務。
2. 服務消費者在啟動時,向註冊中心訂閱自己所需的服務。
3. 註冊中心返回服務提供者地址列表給消費者,如果有變更,註冊中心將基於長連線推
送變更資料給消費者。
4. 服務消費者,從提供者地址列表中,基於軟負載均衡演算法,選一臺提供者進行呼叫,
如果呼叫失敗,再選另一臺呼叫。
5. 服務消費者和提供者,在記憶體中累計呼叫次數和呼叫時間,定時每分鐘傳送一次統計
資料到監控中心。
2.2 註冊中心 Zookeeper 安裝
(1)上傳zookeeper壓縮包到linux伺服器,並解壓縮。
(2)在zookeeper中建立一個data資料夾。
(3)進入conf資料夾,修改 zoo_simple.cfg 為 zoo.cfg,並編輯dataDir的值為剛新建的data資料夾的路徑。
(4)執行zookeeper,檢視狀態
2.3 Dubbox 管理中心
(1)獲取到 Dubbox 的管理中心war包,並上傳到linux伺服器。還需要上傳tomcat壓縮包,用於執行war
(2)解壓縮 tomcat 的壓縮包,並將管理中心的war包,放入webapps目錄下,啟動tomcat
(3)訪問 Dubbox 的管理中心頁面,會顯示輸入登入名和密碼,均為:root
(4)登陸後的介面
備註:
(1)Dubbox 沒有上傳到 maven 倉庫中,如果需要使用需要手動安裝到本地 maven倉庫中。
3、品優購工程框架搭建
3.1 建立一個聚合工程,為整個專案的父工程,並配置 pom.xml,主要為相關jar包的版本號鎖定
3.2 建立通用實體類模組工程
3.3 建立通用資料訪問模組工程
3.4 建立通用元件模組工程
3.5 建立商家商品模組工程(sellergoods-interface、sellergoods-service)
3.6 建立運營商管理後臺工程(manager-web)
3.7 建立商家管理後臺工程(shop-web)
3.8 使用逆向工程生成pojo和dao程式碼,其中pojo類需要手動實現 Serializable 介面
3.9 完成各個工程的基本配置
4、品牌列表-後端
4.1 服務層介面(sellergoods-interface)
package com.pinyougou.sellergoods.service;
import java.util.List;
import com.pinyougou.pojo.TbBrand;
/**
* 品牌相關介面
* @author Administrator
*
*/
public interface BrandService {
/**
* 獲取品牌列表
*
* @return java.util.List<com.pinyougou.pojo.TbBrand>
*/
List<TbBrand> findAll();
}
4.2 服務層實現(sellergoods-service)
package com.pinyougou.sellergoods.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import com.alibaba.dubbo.config.annotation.Service;
import com.pinyougou.mapper.TbBrandMapper;
import com.pinyougou.pojo.TbBrand;
import com.pinyougou.sellergoods.service.BrandService;
@Service
public class BrandServiceImpl implements BrandService {
@Autowired
private TbBrandMapper brandMapper;
@Override
public List<TbBrand> findAll() {
return brandMapper.selectByExample(null);
}
}
4.3 控制層(manager-web)
package com.pinyougou.manager.controller;
import java.util.List;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.dubbo.config.annotation.Reference;
import com.pinyougou.pojo.TbBrand;
import com.pinyougou.sellergoods.service.BrandService;
@RestController
@RequestMapping("/brand")
public class BrandController {
@Reference
private BrandService brandService;
/**
* 獲取品牌列表
*
* @return java.util.List<com.pinyougou.pojo.TbBrand>
*/
@RequestMapping("/findAll")
public List<TbBrand> findAll(){
return brandService.findAll();
}
}
4.4 測試
dubbox監控中心:
備註:
(1)在專案搭建過程中,最後的測試階段,出現了一次問題,訪問 url 報404錯誤,控制檯卡在 Initializing Spring FrameworkServlet 'springmvc',後來發現是因為使用idea建立的maven web骨架沒有resources和java的目錄,需要手動建立,建立resources時不小心輸成了resource,把資原始檔的目錄名resource改成resources即可。