前端:angularJS + Bootstrap;後端:Spring +SpringMVC+mybatis +Dubbox
目錄:
1認識電商
1.1與電商相關的技術特點
1.2電商模式------主要模式
2項目認識
2.1項目(sc)簡介
2.1.1網站前台
2.1.2營運商背景
2.1.3商家管理系統
2.2系統架構
2.2.1SOA架構
2.2.2商城項目架構組合
3Dubbox架構
3.1Dubbox簡介
3.2注冊Zookeeper
3.3Dubbox本地 JAR包部署與安裝(了解)
3.4入門小Demo
3.4.1服務提供者開發
3.4.2服務消費者開發
3.5管理中心的部署
3.5.1管理端安裝
3.5.2管理端使用
1.認識電商
1.1與電商相關的技術特點
技術範圍廣、具有分布式、高并發、叢集、高可用、負載均衡;相對來說技術新、海量資料、業務複雜、系統安全;
1.2電商模式------主要模式
- B2B--企業對企業
是指進行電子商務交易,交易的雙方都是商家(或企業、公司),借助網際網路的技術或各種商務網絡平台,完成商務交易的過程。
- C2C--個人對個人
消費者個人間的電子商務行為。比如通過58平台使用者和使用者進行直接房子或者車子交易;這種交易類型就稱為C2C電子商務。
- B2C--企業對個人
可以了解為商家對使用者的模式;商家直接面向消費者銷售産品和服務商業零售模式。一般以網絡零售業為主,借助于網際網路開展線上銷售活動。像生活中用的比較多的網上商店,消費者通過網絡在網上購物、網上支付等消費行為。
- C2B--個人對企業
使用者對商家的模式,可以了解為使用者的一種消費者貢獻價值,C2B模式和我們熟知的供需模式是相反的,就是先有消費者需求産生而後有企業生産,即先有消費者提出需求,後有生産企業按需求組織生産。通常情況為消費者根據自身需求定制産品和價格,或主動參與産品設計、生産和定價,産品、價格等彰顯消費者的個性化需求,生産企業進行定制化生産。像我們在網上器定制個人的專屬物品或者購買個性化物品的交易模式;
- O2O--線上到線下
O2O:可以了解為——線上支付,線下體驗;是指将線下的商務機會與網際網路結合,讓網際網路成為線下交易的平台;生活中的例子就像我們去點外賣等;
- F2C--工廠到個人
沒有中間商轉差價的模式,簡單了解為廠家直銷;
- B2B2C -企業-企業-個人
B2B2C是一種電子商務類型的網絡購物商業模式,B是BUSINESS的簡稱,C是CUSTOMER的簡稱,第一個B指的是商品或服務的供應商,第二個B指的是從事電子商務的企業,C則是表示消費者。查詢相關資料會發現:第一個BUSINESS,并不僅僅局限于品牌供應商、影視制作公司和圖書出版商,任何的商品供應商或服務供應商都能可以成為第一個BUSINESS;第二B是B2B2C模式的電子商務企業,通過統一的經營管理對商品和服務、消費者終端同時進行整合,是廣大供應商和消費者之間的橋梁,為供應商和消費者提供優質的服務,是網際網路電子商務服務供應商。C表示消費者,在第二個B建構的統一電子商務平台購物的消費者;B2B2C的來源于目前的B2B、B2C模式的演變和完善,把B2C和C2C完美地結合起來,通過B2B2C模式的電子商務企業建構自己的物流供應鍊系統,提供統一的服務。舉個生活中的例子就是:京東商城、天貓商城、使用者互相之間的關系;
2.項目認識
項目簡稱商城,用首寫字母表示:sc
2.1 項目(sc)簡介
模拟b2b2c平台,類似與京東、天貓商城。采用的是商家入駐模式,商家入駐通過後,商家有獨立的管理背景錄入商品資訊,然後釋出;
商城項目主要模拟三個闆塊:網站前台、營運商背景、商家管理系統(背景);
2.1.1 網站前台
一般包括首頁、商品詳細頁、搜尋頁、會員中心、訂單、支付、秒殺等;根據個人能力去做,其中支付和秒殺的知識點相對來說比較重要一些;參考京東頁面;
2.1.2 營運商背景
營運人員的各種管理背景,如:稽核、品牌、規格、商品分類、訂單查詢、商品結算等等管理;如圖
2.1.3 商家管理系統
入駐的商家管理背景,如:商品的管理訂單查詢或者統計、資金結算等相關功能;如圖
2.2 系統構架
2.2.1 SOA構架
SOA是一種支援面向服務的架構服務樣式;從服務、基于服務開發和服務的結果來看,面向服務是一種思維方式,更多的應用在網際網路項目開發,在裡面具體的功能有:頁面和業務邏輯分離;
相對來說,項目采用SOA架構,個人了解,其實是看中了分布式架構,它能使項目有條不紊的進行,如上面所說,運用在頁面和業務邏輯分離,這種優勢在正常的垂直架構中展現的比較明顯;
- sc項目模拟架構圖
2.2.2商城項目架構組合
sc項目采用目前流行的前後端程式設計架構,相關的架構有:angularJS + Bootstrap / Spring +SpringMVC+mybatis +Dubbox;
3.Dubbox架構
3.1 Dubbox簡介
Dubbox 是一個分布式服務架構,其前身是阿裡巴巴開源項目Dubbo ,被國内電商及網際網路項目中使用,後期阿裡巴巴停止了該項目的維護,當當網便在Dubbo基礎上進行優化,并繼續維護,為了與原有的Dubbo區分,故将其命名為Dubbox。
Dubbox 緻力于提供高性能和透明化的RPC遠端服務調用方案,以及SOA服務治理方案。簡單的說,dubbox就是個服務架構,如果沒有分布式的需求,其實是不需要用的,隻有在分布式的時候,才有dubbox這樣的分布式服務架構的需求,并且本質上是服務調用,說白了就是個遠端服務調用的分布式架構。如圖:
其中的調用關系(個人)了解如下:
1. 服務容器負責啟動,加載,運作服務提供者。
2. 服務提供者在啟動時,向注冊中心注冊自己提供的服務。
3. 服務消費者在啟動時,向注冊中心訂閱自己所需的服務。
4. 注冊中心傳回服務提供者位址清單給消費者,如果有變更,注冊中心将基于長連接配接推送變更資料給消費者。
5. 服務消費者,從提供者位址清單中,基于軟負載均衡算法,選一台提供者進行調用,如果調用失敗,再選另一台調用。
6. 服務消費者和提供者,在記憶體中累計調用次數和調用時間,定時每分鐘發送一次統計資料到監控中心。
3.2注冊Zookeeper
官方推薦使用 zookeeper 注冊中心。注冊中心負責服務位址的注冊與查找,相當于目錄服務,服務提供者和消費者隻在啟動時與注冊中心互動,注冊中心不轉發請求,壓力較小。
安裝步驟:
第一步:安裝 jdk
第二步:把 zookeeper 的壓縮包上傳到 linux 系統。
注意:可以用:Alt+P 進入SFTP ,輸入put d:\xxx 指令上傳;
第三步:解壓縮壓縮包
第四步:進入 zookeeper 目錄,建立 data 檔案夾。
第五步:進入conf目錄 ,把 zoo_sample.cfg 改名為 zoo.cfg。
第六步:打開zoo.cfg , 修改 data 屬性:dataDir=/root/zookeeper-3.4.6/data。
3.3Dubbox本地 JAR包部署與安裝(了解)
Dubbox的jar包并沒有部署到Maven的中間倉庫中,大家在Maven的中間倉庫中可以查找到Dubbo的最終版本是2.5.3 , 阿裡巴巴解散了Dubbo團隊後由當當網繼續維護此項目,并改名為 Dubbox ,坐标不變,版本變更了,但是并沒有送出到中間倉庫。
我們現在需要手動将Dubbox的jar包安裝到我的本地倉庫中。
先将dubbo-2.8.4.jar包放到d:\setup, 然後輸入指令
mvn install:install-file -Dfile=d:\setup\dubbo-2.8.4.jar -DgroupId=com.alibaba -DartifactId=dubbo -Dversion=2.8.4 -Dpackaging=jar
3.4入門小Demo
3.4.1服務提供者開發
開發步驟:
(1)建立Maven工程dubboxdemo-service 再在pom.xml中引入依賴
1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
2 <modelVersion>4.0.0</modelVersion>
3 <groupId>cn.itcast.dubboxdemo</groupId>
4 <artifactId>dubboxdemo-service</artifactId>
5 <version>0.0.1-SNAPSHOT</version>
6 <packaging>war</packaging>
7 <properties>
8 <spring.version>4.2.4.RELEASE</spring.version>
9 </properties>
10 <dependencies>
11 <!-- Spring -->
12 <dependency>
13 <groupId>org.springframework</groupId>
14 <artifactId>spring-context</artifactId>
15 <version>${spring.version}</version>
16 </dependency>
17 <dependency>
18 <groupId>org.springframework</groupId>
19 <artifactId>spring-beans</artifactId>
20 <version>${spring.version}</version>
21 </dependency>
22 <dependency>
23 <groupId>org.springframework</groupId>
24 <artifactId>spring-webmvc</artifactId>
25 <version>${spring.version}</version>
26 </dependency>
27 <dependency>
28 <groupId>org.springframework</groupId>
29 <artifactId>spring-jdbc</artifactId>
30 <version>${spring.version}</version>
31 </dependency>
32 <dependency>
33 <groupId>org.springframework</groupId>
34 <artifactId>spring-aspects</artifactId>
35 <version>${spring.version}</version>
36 </dependency>
37 <dependency>
38 <groupId>org.springframework</groupId>
39 <artifactId>spring-jms</artifactId>
40 <version>${spring.version}</version>
41 </dependency>
42 <dependency>
43 <groupId>org.springframework</groupId>
44 <artifactId>spring-context-support</artifactId>
45 <version>${spring.version}</version>
46 </dependency>
47 <!-- dubbo相關 -->
48 <dependency>
49 <groupId>com.alibaba</groupId>
50 <artifactId>dubbo</artifactId>
51 <version>2.8.4</version>
52 </dependency>
53 <dependency>
54 <groupId>org.apache.zookeeper</groupId>
55 <artifactId>zookeeper</artifactId>
56 <version>3.4.6</version>
57 </dependency>
58 <dependency>
59 <groupId>com.github.sgroschupf</groupId>
60 <artifactId>zkclient</artifactId>
61 <version>0.1</version>
62 </dependency>
63 <dependency>
64 <groupId>javassist</groupId>
65 <artifactId>javassist</artifactId>
66 <version>3.11.0.GA</version>
67 </dependency>
68 </dependencies>
69 <build>
70 <plugins>
71 <plugin>
72 <groupId>org.apache.maven.plugins</groupId>
73 <artifactId>maven-compiler-plugin</artifactId>
74 <version>2.3.2</version>
75 <configuration>
76 <source>1.7</source>
77 <target>1.7</target>
78 </configuration>
79 </plugin>
80 <plugin>
81 <groupId>org.apache.tomcat.maven</groupId>
82 <artifactId>tomcat7-maven-plugin</artifactId>
83 <configuration>
84 <!-- 指定端口,可以為8081 -->
85 <port>xx</port>
86 <!-- 請求路徑 -->
87 <path>/</path>
88 </configuration>
89 </plugin>
90 </plugins>
91 </build>
92 </project>
View Code
(2)在電商sc項目工程的webapps下建立WEB-INF檔案夾,建立web.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xmlns="http://java.sun.com/xml/ns/javaee"
4 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
5 version="2.5">
6 <!-- 加載spring容器 -->
7 <context-param>
8 <param-name>contextConfigLocation</param-name>
9 <param-value>classpath:applicationContext*.xml</param-value>
10 </context-param>
11 <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
12 </listener>
13 </web-app>
View Code
(3)建立業務接口
1 package 包名;
2 /**
3 * 業務接口
4 * @author sc
5 *
6 */
7 public interface UserService {
8 public String getName();
9 }
View Code
(4)建立業務實作類
1 package 包名;
2 import 工具類包名;
3 import 業務層包名;
4 @Service
5 public class UserServiceImpl implements UserService {
6 public String getName() {
7 return "sc";
8 }
9 }
View Code
(5)編寫配置檔案
1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
4 xmlns:context="http://www.springframework.org/schema/context"
5 xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:mvc="http://www.springframework.org/schema/mvc"
6 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
7 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
8 http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
9 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
10 <dubbo:application name="dubboxdemo-service"/>
11 <dubbo:registry address="zookeeper://IP位址"/>
12 <dubbo:annotation package="包名" />
13 </beans>
View Code
(6)測試運作
tomcat7:run
3.4.2服務消費者開發
開發步驟
(1)建立Maven工程 ,在pom.xml引入依賴 ,同“dubboxdemo-service”工程。可以把tomcat插件的運作端口改為8082 。
(2)在webapps目錄下建立WEB-INF 目錄,并建立web.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xmlns="http://java.sun.com/xml/ns/javaee"
4 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
5 version="2.5">
6 <!-- 解決post亂碼 -->
7 <filter>
8 <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
9 <init-param>
10 <param-name>encoding</param-name>
11 <param-value>utf-8</param-value>
12 </init-param>
13 <init-param>
14 <param-name>forceEncoding</param-name>
15 <param-value>true</param-value>
16 </init-param>
17 </filter>
18 <filter-mapping>
19 <filter-name>CharacterEncodingFilter</filter-name>
20 <url-pattern>/*</url-pattern>
21 </filter-mapping>
22 <servlet>
23 <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
24 <!-- 指定加載的配置檔案 ,通過參數contextConfigLocation加載-->
25 <init-param>
26 <param-name>contextConfigLocation</param-name>
27 <param-value>classpath:applicationContext-web.xml</param-value>
28 </init-param>
29 </servlet>
30 <servlet-mapping>
31 <servlet-name>springmvc</servlet-name>
32 <url-pattern>*.*</url-pattern>
33 </servlet-mapping>
34 </web-app>
View Code
(3)拷貝業務接口:将“dubboxdemo-service”工程的(包名) 包以及下面的接口拷貝至此工程。
(4)編寫Controller
1 package 包名;
2 import org.springframework.beans.factory.annotation.Autowired;
3 import org.springframework.stereotype.Controller;
4 import org.springframework.web.bind.annotation.RequestMapping;
5 import org.springframework.web.bind.annotation.ResponseBody;
6 import 包名.類名;
7 @Controller
8 @RequestMapping("/xx")
9 public class UserController {
10 @Reference
11 private UserService userService;
12 @RequestMapping("/showName")
13 @ResponseBody
14 public String showName(){
15 return userService.getName();
16 }
17 }
View Code
(5)編寫spring配置檔案
1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
4 xmlns:context="http://www.springframework.org/schema/context"
5 xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:mvc="http://www.springframework.org/schema/mvc"
6 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
7 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
8 http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
9 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
10
11 <mvc:annotation-driven >
12 <mvc:message-converters register-defaults="false">
13 <bean class="org.springframework.http.converter.StringHttpMessageConverter">
14 <constructor-arg value="UTF-8" />
15 </bean>
16 </mvc:message-converters>
17 </mvc:annotation-driven>
18 <!-- 引用dubbo 服務 -->
19 <dubbo:application name="dubboxdemo-web" />
20 <dubbo:registry address="zookeeper://ip位址"/>
21 <dubbo:annotation package="包名" />
22 </beans>
View Code
(6)測試運作
tomcat7:run;或者在遊覽器中輸入:http://localhost:(端口号)/項目名.do
3.5管理中心的部署
我們在開發項目時,需要知道注冊中心都注冊了哪些服務,以便我們開發和測試。我們可以通過部署一個管理中心來實作。其實管理中心就是一個web應用,部署到tomcat即可。
3.5.1管理端安裝
(1)編譯源碼,得到war包
下載下傳dubbox-master.zip ,這個是dubbox的源碼,我們可以使用maven指令編譯源碼得到“管理端”的war包。将此壓縮包解壓,在指令符下進入dubbo-admin目錄 ,輸入maven指令:mvn package -Dmaven.skip.test=true
(2)進入target檔案夾,你會看到一個dubbo-admin-2.8.4.war , 在linux伺服器上安裝tomcat, 将此war包上傳到linux伺服器的tomcat的webapps下。
(3)如果你部署在zookeeper同一台主機并且端口是預設的2181,則無需修改任何配置。如果不是在一台主機上或端口被修改,需要修改WEB-INF下的dubbo.properties ,修改如下配置:
dubbo.registry.address=zookeeper://127.0.0.1:2181
修改後重新啟動tomcat
3.5.2管理端使用
(1)打開浏覽器,輸入http://192.168.xx.xx:8080/sc ,(設定的)登入使用者名和密碼均為root 進入首頁。
(2)啟動服務提供者工程,即可在服務治理-提供者檢視到該服務。點選其中一條資料後可以檢視詳情。
(3)啟動服務消費者工程,運作頁面,觀察“消費者”清單