系統間服務調用方式有三種,瀏覽器直接訪問,通過Ajax或者jsonp方式請求。第二種,httpclient方式發起http協議的請求,是后臺調用。第三種基于RPC方式的遠程過程調用協議的請求。DUBBO是一個分布式服務框架,致力于提供高性能和透明化的RPC遠程服務調用方案,是阿里巴巴SOA服務化治理方案的核心框架,每天為2,000+個服務提供3,000,000,000+次訪問量支持,并被廣泛應用于阿里巴巴集團的各成員站點。
了解dubbo工作原理,下面的依賴關系圖是重點內容:

圖中小方塊PRotocol, Cluster, Proxy, Service, Container, Registry, Monitor代表層或模塊,藍色的表示與業務有交互,綠色的表示只對Dubbo內部交互。 圖中背景方塊Consumer, Provider, Registry, Monitor代表部署邏輯拓普節點。 圖中藍色虛線為初始化時調用,紅色虛線為運行時異步調用,紅色實線為運行時同步調用。 圖中只包含RPC的層,不包含Remoting的層,Remoting整體都隱含在Protocol中。
ZooKeeper是一個分布式的,開放源碼的分布式應用程序協調服務。它主要是用來解決分布式應用中經常遇到的一些數據管理問題,如:統一命名服務、狀態同步服務、集群管理、分布式應用配置項的管理等。它的作用相當于對集群的管理,消費者和生產者都要到zookeeper進行服務的發布和注冊。
1.將dubbo包安裝到本地maven
2.安裝zookeeper
3.寫服務提供方代碼(API項目,服務實現層項目)
4.寫服務調用方代碼
第一步,略
第二步,略
遇到三個問題:
1.在dubbo包install的時候發生一個問題:Maven : error in opening zip file when running maven。
解決:我們要做的就是刪除repository目錄下提示“error in opening zip file",然后從新編譯就OK了,如果遇到多個這樣的錯誤只需要把出現這種錯誤的目錄刪除,從新編譯就行了。
2. Dubbo admin在JDK1.8環境運行報Invalid property 'URIType' of bean class
原因:URIType 的get和set方法寫得不規范。 解決方法:降級jdk到1.7。
3.問題:dubbo部署到tomcat,一直執行到 INFO zkclient.ZkEventThread - Starting ZkClient 就不會再繼續往下執行了
解決:這個簡單,是因為zookeeper服務沒有啟動。
3.寫服務提供方代碼(API項目,服務實現層項目)
三個maven項目,dubbo-a、dubbo-b、dubbo-b-api。其中A是服務調用方,B是服務提供方,API項目中放著B暴露的接口,和POJO。A和B項目都依賴dubbo-b-api。dubbo是采用spring配置的,所以需要導入spring容器。
dubbo-b:

dubbo-b-api:

dubbo-a:

實現類修不展示了,隨便寫點業務邏輯做測試就行,主要是配置文件的配置。
dubbo-a/dubbo-comsummer.xml:
<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.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!-- 提供方應用信息,用于計算依賴關系 --> <dubbo:application name="dubbo-a-consumer"/> <!-- 這里使用的注冊中心是zookeeper --> <dubbo:registry address="zookeeper://127.0.0.1:2181" client="zkclient"/> <!-- 從注冊中心中查找服務 --> <dubbo:reference id="userService" interface="cn.itcast.dubbo.service.UserService"/> </beans>dubbo-b/dubbo-server.xml:<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.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!-- 提供方應用信息,用于計算依賴關系 --> <dubbo:application name="dubbo-b-server"/> <!-- 這里使用的注冊中心是zookeeper --> <dubbo:registry address="zookeeper://127.0.0.1:2181" client="zkclient"/> <!-- 用dubbo協議在20880端口暴露服務 --> <dubbo:protocol name="dubbo" port="20880"/> <!-- 將該接口暴露到dubbo中 --> <dubbo:service interface="cn.itcast.dubbo.service.UserService" ref="userServiceImpl"/> <!-- 將具體的實現類加入到Spring容器中 --> <bean id="userServiceImpl" class="cn.itcast.dubbo.service.impl.UserServiceImpl"/> <dubbo:monitor protocol="registry"/></beans>為什么會有api項目,把公共的內容抽取出來,如接口,pojo,解決了代碼重復的問題,同時可以統一管理。dubbo監控工具:dubbo-monitor-simple
服務運行之后,可以通過:dubbo-monitor-simple 監控dubbo服務。查看服務調用次數,等等。這里最大并發數是累加的。
dubbo管理工具:dubbo-admin-2.5.3.war
1.解壓到tomcat的root下面,替換了2.配置D:/dubbo-tomcat7.0/webapps/ROOT/WEB-INF/dubbo.properties3.啟動tomcat,一定要先啟動zkServer.cmd
最后訪問8080端口,就可以看到dubbo的管理界面了
總結:
多學習,多思考。
新聞熱點
疑難解答