最近在公司用到阿里的dubbo作RPC分佈式服務化,記錄一下項目服務環境搭建的一些過程,方便後來的同行能夠少走些彎路,歡迎你們一塊兒交流分享。java
1、環境準備mysql
6臺機器以下:linux
用到的軟件以下:web
jdk-7u79-linux-x64.rpm、zookeeper-3.3.6-218一、apache-tomcat-7.0.57.tar.gz、dubbo-admin.war。spring
說明:zookeeperA、zookeeperB、zookeeperC上都安裝jdk-7u79-linux-x64.rpm和zookeeper-3.3.6-2181。sql
tomcat(dubbo-provider)、tomcat(dubbo-consumer)、tomcat(dubbo-admin) 上都安裝jdk-7u79-linux-x64.rpm、apache-tomcat-7.0.57.tar.gz。apache
在tomcat(dubbo-provider)這臺機器上部署web-provider服務化的接口。瀏覽器
在tomcat(dubbo-consumer)上部署web-consumer服務消費的項目。tomcat
dubbo-provider和dubbo-consumer均可以分別集羣化部署,加強服務的安全性和健壯性等。安全
tomcat(dubbo-admin) 部署dubbo的管理後臺dubbo-admin.war
========================================================================
2、zookeeper分佈式集羣安裝配置
(zookeeper服務器最好是奇數個,由於選舉時以過半數即經過)
在zookeeperA上操做:
# cd zookeeper-3.3.6-2181/conf
# mv zoo_sample.cfg zoo.cfg
# vi zoo.cfg
修改配置爲以下:
其中server.A=B:C:D的A是集羣節點ID,B是機器IP或域名,C是節點數據交互端口,D是從新選舉時用的選舉端口。還有dataDir不能用相對地址,否則會致使zookeeper啓動失敗,並且dataDir對應的目錄必須存在。
在zookeeper根目錄下建立數據目錄data
#mkdir ../data
在數據目錄data下新建服務器id文件myid
# vi myid
寫入服務器集羣標識符號:103 並保存。
在zookeeperB、zookeeperC上作zookeeperA一樣的操做,惟一不一樣的是設置myid文件值分別爲10四、105.
在zookeeperA、zookeeperB、zookeeperC上安裝配置完後,分別啓動zookeeper:
zookeeper經常使用命令:
./zkServer.sh start 啓動zookeeper服務
./zkServer.sh stop 中止zookeeper服務
./zkServer.sh restart 重啓zookeeper服務
./zkServer.sh status 查看zookeeper服務啓動狀態
./zkCli.sh -server ${leader_address}:2888 鏈接進入zookeeper客戶端命令行,${leader_address}必須是leader
以下:
========================================================================
3、dubbo-provider服務提供者
這裏的provider是用springmvc+spring+mybatis+mysql搭建的項目,spring中整合了dubbo,項目結構以下:
注:必定要把服務提供方的須要暴露的接口CountService.java單獨打成jar包,導入到服務消費方。
dubbo關鍵依賴包:
spring依賴包,netty-3.2.10.Final.jar,dubbo-2.5.3.jar,javassist-3.9.0.GA.jar,zkclient-0.1.jar,zookeeper-3.4.6.jar
關鍵配置spring-provider.xml配置以下:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" 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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd" default-lazy-init="true"> <bean id="countService" class="com.web.service.impl.CountServiceImpl"/> <!--提供方應用名,用於計算依賴關係,不是匹配條件,不要與消費方同樣 --> <dubbo:application name="${dubbo.name}"/> <!-- 使用multicast廣播註冊中心暴露發現服務地址 --> <dubbo:registry protocol="zookeeper" address="${dubbo.address}"/> <dubbo:protocol name="dubbo" port="2888" /> <!-- ============================對外暴露提供調用的服務 ==============================--> <dubbo:service interface="com.web.service.CountService" ref="countService" /> </beans>
========================================================================
4、dubbo-consumer服務消費者
這裏的consumer也是用springmvc+spring+mybatis+mysql搭建的項目,spring中整合了dubbo,項目結構以下:
dubbo關鍵依賴包:
spring依賴包,netty-3.2.10.Final.jar,dubbo-2.5.3.jar,javassist-3.9.0.GA.jar,zkclient-0.1.jar,zookeeper-3.4.6.jar
關鍵配置spring-consumer.xml配置以下:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" 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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd" default-lazy-init="true"> <!-- 消費方應用名,用於計算依賴關係,不是匹配條件,不要與提供方同樣 --> <dubbo:application name="${dubbo.name}"/> <!-- 使用multicast廣播註冊中心暴露發現服務地址 --> <dubbo:registry protocol="zookeeper" address="${dubbo.address}"/> <!-- 生成遠程服務代理,能夠和本地bean同樣使用demoService --> <!-- ============================begin User Module ==============================--> <dubbo:reference id="countService" interface="com.web.service.CountService" timeout="5000" check="false"/>
消費形式能夠直接在控制層或服務層直接調用provider提供的遠程方法,RPC遠程過程調用。
========================================================================
5、dubbo-admin服務管理後臺
下載dubbo-admin, http://download.csdn.net/detail/x1j2b3/9645686
直接解壓並修改WEB-INF下的dubbo.properties爲:
dubbo.registry.address=zookeeper://192.168.1.104:2181
dubbo.admin.root.password=root
dubbo.admin.guest.password=guest
重命名項目名爲:ROOT,刪除tomcat中webapp下默認的項目,把ROOT部署到tomcat,(注:tomcat8不兼容,只能是tomcat7或tomcat6).
而後在瀏覽器訪問項目:http://192.168.1.107
在彈出框輸入dubbo管理後臺的帳號密碼便可登陸以下:
能夠看到剛剛部署上去的provider和consumer兩個項目,這個控制檯能夠作好些監控和管理。
========================================================================
6、項目測試
能夠看到consumer直接調用provider的遠程方法,能夠成功返回數據。後面要擴展暴露多個服務能夠直接在dubbo.xml配置文件裏面配置,同時要調用多個服務也同樣在consumer的dubbo.xml裏面配置便可像本地方法同樣調用遠程方法。另外,provider和consumer能夠分別作集羣部署,提升可靠性和可用性。