我們將上面開發的服務提供方服務,部署到2個獨立的節點上(192.168.14.1和10.10.4.125),然后可以通過Dubbo管理中心查看對應服務的狀況,如圖所示:
上圖中可以看出,該服務有兩個獨立的節點可以提供,因為配置的集群模式為failover,如果某個節點的服務發生故障無法使用,則會自動透明地重試另一個節點上的服務,這樣就不至于出現拒絕服務的情況。如果想要查看提供方某個節點上的服務詳情,可以點擊對應的IP:Port鏈接,示例如圖所示:
?
上圖可以看到服務地址?
dubbo://10.10.4.125:20880/org.shirdrn.dubbo.api.ChatRoomOnlineUserCounterService?actives=100&anyhost=true&application=chatroom-cluster-provider&cluster=failover&dubbo=0.0.1-SNAPSHOT&executes=200&interface=org.shirdrn.dubbo.api.ChatRoomOnlineUserCounterService&loadbalance=random&methods=getMaxOnlineUserCount,queryRoomUserCount&pid=30942&queryRoomUserCount.actives=50&queryRoomUserCount.loadbalance=leastactive&queryRoomUserCount.retries=2&queryRoomUserCount.timeout=500&retries=2&revision=0.0.1-SNAPSHOT&side=provider&timeout=1000×tamp=1427793652814&version=1.0.0
如果我們直接暴露該地址也是可以的,不過這種直連的方式對服務消費方不是透明的,如果以后IP地址更換,也會影響調用方,所以最好是通過注冊中心來隱蔽服務地址。同一個服務所部署在的多個節點上,也就對應對應著多個服務地址。另外,也可以對已經發布的服務進行控制,如修改訪問控制、負載均衡相關配置內容等,可以通過上圖中“消費者”查看服務消費方調用服務的情況,如圖所示:
也在管理控制臺可以對消費方進行管理控制。
-
●Dubbo監控中心
Dubbo監控中心是以Dubbo服務的形式發布到注冊中心,和普通的服務時一樣的。例如,我這里下載了Dubbo自帶的簡易監控中心文件dubbo-monitor-simple-2.5.3-assembly.tar.gz,可以解壓縮以后,修改配置文件~/dubbo-monitor-simple-2.5.3/conf/dubbo.properties的內容,如下所示:
?
dubbo.container=log4j,spring,registry,jetty
dubbo.application.name=simple-monitor
dubbo.application.owner=
dubbo.registry.address=zookeeper://zk1:2181?backup=zk2:2181,zk3:2181
dubbo.protocol.port=7070
dubbo.jetty.port=8087
dubbo.jetty.directory=${user.home}/monitor
dubbo.charts.directory=${dubbo.jetty.directory}/charts
dubbo.statistics.directory=${user.home}/monitor/statistics
dubbo.log4j.file=logs/dubbo-monitor-simple.log
dubbo.log4j.level=WARN
然后啟動簡易監控中心,執行如下命令:?
cd ~/dubbo-monitor-simple-2.5.3
bin/start.sh
這里使用了Jetty Web容器,訪問地址?http://10.10.4.130:8087/?就可以查看監控中心,Applications選項卡頁面包含了服務提供方和消費方的基本信息,如圖所示:
上圖主要列出了所有提供方發布的服務、消費方調用、服務依賴關系等內容。
接著,查看Services選項卡頁面,包含了服務提供方提供的服務列表,如圖所示:
點擊上圖中Providers鏈接就能看到服務提供方的基本信息,包括服務地址等,如圖所示:
點擊上圖中Consumers鏈接就能看到服務消費方的基本信息,包括服務地址等,如圖所示:
由于上面是Dubbo自帶的一個簡易監控中心,可能所展現的內容并不能滿足我們的需要,所以可以根據需要開發自己的監控中心。Dubbo也提供了監控中心的擴展接口,如果想要實現自己的監控中心,可以實現接口com.alibaba.dubbo.monitor.MonitorFactory和com.alibaba.dubbo.monitor.Monitor,其中MonitorFactory接口定義如下所示:
?
/** * MonitorFactory. (SPI, Singleton, ThreadSafe) * * @author william.liangf */ @SPI("dubbo") public interface MonitorFactory {/*** Create monitor.* @param url* @return monitor*/@Adaptive("protocol")Monitor getMonitor(URL url);}
?
?
Monitor接口定義如下所示:
Monitor接口定義如下所示:
/** * Monitor. (SPI, Prototype, ThreadSafe) * * @see com.alibaba.dubbo.monitor.MonitorFactory#getMonitor(com.alibaba.dubbo.common.URL) * @author william.liangf */ public interface Monitor extends Node, MonitorService {}?
具體定義內容可以查看MonitorService接口,不再累述。
總結
Dubbo還提供了其他很多高級特性,如路由規則、參數回調、服務分組、服務降級等等,而且很多特性在給出內置實現的基礎上,還給出了擴展的接口,我們可以給出自定義的實現,非常方便而且強大。更多可以參考Dubbo官網用戶手冊和開發人員手冊。?
附錄:Dubbo使用Maven構建依賴配置?


<properties><spring.version>3.2.8.RELEASE</spring.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>2.5.3</version><exclusions><exclusion><groupId>org.springframework</groupId><artifactId>spring</artifactId></exclusion><exclusion><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId></exclusion><exclusion><groupId>org.jboss.netty</groupId><artifactId>netty</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.6.2</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.16</version></dependency><dependency><groupId>org.javassist</groupId><artifactId>javassist</artifactId><version>3.15.0-GA</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>hessian-lite</artifactId><version>3.2.1-fixed-2</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.1.8</version></dependency><dependency><groupId>org.jvnet.sorcerer</groupId><artifactId>sorcerer-javac</artifactId><version>0.8</version></dependency><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.4.5</version></dependency><dependency><groupId>com.github.sgroschupf</groupId><artifactId>zkclient</artifactId><version>0.1</version></dependency><dependency><groupId>org.jboss.netty</groupId><artifactId>netty</artifactId><version>3.2.7.Final</version></dependency></dependencies>
?