目錄:
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>
(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>
(3)創建業務接口

1 package 包名; 2 /** 3 * 業務接口 4 * @author sc 5 * 6 */ 7 public interface UserService { 8 public String getName(); 9 }
(4)創建業務實現類

1 package 包名; 2 import 工具類包名; 3 import 業務層包名; 4 @Service 5 public class UserServiceImpl implements UserService { 6 public String getName() { 7 return "sc"; 8 } 9 }
(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>
(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>
(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 }
(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>
(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)啟動服務消費者工程,運行頁面,觀察“消費者”列表