《商城專案01》--用dubbo實現對子系統的遠端呼叫
最近加班不太多, 琢磨著把之前做的基於SOA架構的《商城專案》簡單整理下。記得當時做的時候涉及到dubbo, redis, activeMQ, solr等覺著挺六的技術,現在每天寫寫介面,偶爾客串寫寫前端,分散式相關的那些東西忘的差不多了,等在用到的時候估計還得從頭來過,想想都費勁。所以這篇算是簡單開個頭,今後琢磨啥新的東西的時候,有必要將學習過程簡單做個記錄,當再次用到的時候只需要看看記錄就能較快的上手。
一, 專案架構
1,初始架構
2,改造之後的SOA面向服務架構
面向服務,在這就是將service服務層單獨拿出來細化為會員、訂單等各個子系統,供web層系統選擇性呼叫。在這裡web層系統對service層系統的遠端呼叫,用的是dubbo技術實現的。
二,dubbo的應用
1,先盜用一個簡單的dubbo工作流程圖
節點角色說明:
Provider: 暴露服務的服務提供方。
Consumer: 呼叫遠端服務的服務消費方。
Registry: 服務註冊與發現的註冊中心。
Monitor: 統計服務的呼叫次調和呼叫時間的監控中心。
Container: 服務執行容器
在這裡,service層系統(Provider)將服務釋出到註冊中心Registry(專案中用的zookeeper),web層系統根據連線引數到註冊中心Registry呼叫已釋出的服務。
2,zookeeper的安裝配置
2.1 解壓安裝包
連結:https://pan.baidu.com/s/1NxoCs8W-12IFvuDSMf07Wg
提取碼:zfrl
2.2 在zookeeper-3.4.9目錄下新建名為data的資料夾
2.3 修改配置檔案 conf/zoo.cfg(複製於zoo_sample.cfg)
2.4 配置相關引數
dataDir: 2.2中新建的data資料夾路徑(改成自己的)
clientPort: 執行埠號
2.5 啟動測試
zookeeper-3.4.9/ bin/ zkServer.cmd -->ok
3,在專案中的具體應用
3.1 在對應的應用中新增需要依賴的jar包; ( e3-service/e3-web pom.xml )
<!-- dubbo相關 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
<exclusion>
<groupId>org.jboss.netty</groupId>
<artifactId>netty</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
</dependency>
3.2 釋出方應用進行釋出服務相關配置; ( e3-service --applicationContext*.xml)
<應用/註冊中心/dubbo埠/釋出服務>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd">
<!-- 配置包掃描器 -->
<!-- 對應的是e3-interface中的包 -->
<context:component-scan base-package="cn.e3mall.service"></context:component-scan>
<!-- 使用dubbo釋出服務 -->
<!-- 提供方應用資訊,用於計算依賴關係 -->
<dubbo:application name="e3-manager" />
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" />
<!-- 用dubbo協議在20880埠暴露服務 -->
<dubbo:protocol name="dubbo" port="20880" />
<!-- 宣告需要暴露的服務介面; timeout用於設定debug超時時間(30秒) -->
<dubbo:service interface="cn.e3mall.service.ItemService" ref="itemServiceImpl" timeout="30000" />
<dubbo:service interface="cn.e3mall.service.ItemCatService" ref="itemCatServiceImpl" timeout="30000" />
</beans>
3.3 呼叫方應用進行釋出服務相關配置; ( e3-manager-web )
<應用/註冊中心/呼叫服務>
其中命xmlns名空間同上,
<!-- 引用dubbo服務 -->
<dubbo:application name="e3-manager-web"/>
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"/>
<!-- 相當於建立一個名為itemService的bean -->
<dubbo:reference interface="cn.e3mall.service.ItemService" id="itemService" />
<dubbo:reference interface="cn.e3mall.service.ItemCatService" id="itemCatServiceTest007" />
需要注意一點:有兩行是後期額外新增的:
3.4, 啟動應用, 測試遠端呼叫服務的效果; ( e3-web呼叫e3-service釋出的對應介面)
三、Dubbo-admin的應用
1, Dubbo-admin的安裝配置
1.1 可新建一Tomcat安裝包,執行Dubbo-admin
1.2 將dubbo-admin.war複製到對應Tomcat安裝包的webapps目錄下
(在此附上dubbo-admin.war下載連結 https://pan.baidu.com/s/19sAuIaLl01Kl_D1W4RI3dw 提取碼:35ll)
1.3 執行Tomcat直接訪問(http://localhost:8080/dubbo-admin/),其中埠8080可自定義修改
此為註冊中心監控, 可檢視對應的服務釋出者和消費者
登入: root/root,能出現下圖即操作ok!!!
到此,使用dubbo進行系統之間的遠端呼叫算是ok了,到點了洗洗碎覺。