基于Dubbo框架构建分布式服务(三)
我們將上面開發(fā)的服務(wù)提供方服務(wù),部署到2個(gè)獨(dú)立的節(jié)點(diǎn)上(192.168.14.1和10.10.4.125),然后可以通過Dubbo管理中心查看對(duì)應(yīng)服務(wù)的狀況,如圖所示:
上圖中可以看出,該服務(wù)有兩個(gè)獨(dú)立的節(jié)點(diǎn)可以提供,因?yàn)榕渲玫募耗J綖閒ailover,如果某個(gè)節(jié)點(diǎn)的服務(wù)發(fā)生故障無法使用,則會(huì)自動(dòng)透明地重試另一個(gè)節(jié)點(diǎn)上的服務(wù),這樣就不至于出現(xiàn)拒絕服務(wù)的情況。如果想要查看提供方某個(gè)節(jié)點(diǎn)上的服務(wù)詳情,可以點(diǎn)擊對(duì)應(yīng)的IP:Port鏈接,示例如圖所示:
?
上圖可以看到服務(wù)地址?
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如果我們直接暴露該地址也是可以的,不過這種直連的方式對(duì)服務(wù)消費(fèi)方不是透明的,如果以后IP地址更換,也會(huì)影響調(diào)用方,所以最好是通過注冊(cè)中心來隱蔽服務(wù)地址。同一個(gè)服務(wù)所部署在的多個(gè)節(jié)點(diǎn)上,也就對(duì)應(yīng)對(duì)應(yīng)著多個(gè)服務(wù)地址。另外,也可以對(duì)已經(jīng)發(fā)布的服務(wù)進(jìn)行控制,如修改訪問控制、負(fù)載均衡相關(guān)配置內(nèi)容等,可以通過上圖中“消費(fèi)者”查看服務(wù)消費(fèi)方調(diào)用服務(wù)的情況,如圖所示:
也在管理控制臺(tái)可以對(duì)消費(fèi)方進(jìn)行管理控制。
-
●Dubbo監(jiān)控中心
Dubbo監(jiān)控中心是以Dubbo服務(wù)的形式發(fā)布到注冊(cè)中心,和普通的服務(wù)時(shí)一樣的。例如,我這里下載了Dubbo自帶的簡(jiǎn)易監(jiān)控中心文件dubbo-monitor-simple-2.5.3-assembly.tar.gz,可以解壓縮以后,修改配置文件~/dubbo-monitor-simple-2.5.3/conf/dubbo.properties的內(nèi)容,如下所示:
?
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然后啟動(dòng)簡(jiǎn)易監(jiān)控中心,執(zhí)行如下命令:?
cd ~/dubbo-monitor-simple-2.5.3 bin/start.sh這里使用了Jetty Web容器,訪問地址?http://10.10.4.130:8087/?就可以查看監(jiān)控中心,Applications選項(xiàng)卡頁(yè)面包含了服務(wù)提供方和消費(fèi)方的基本信息,如圖所示:
上圖主要列出了所有提供方發(fā)布的服務(wù)、消費(fèi)方調(diào)用、服務(wù)依賴關(guān)系等內(nèi)容。
接著,查看Services選項(xiàng)卡頁(yè)面,包含了服務(wù)提供方提供的服務(wù)列表,如圖所示:
點(diǎn)擊上圖中Providers鏈接就能看到服務(wù)提供方的基本信息,包括服務(wù)地址等,如圖所示:
點(diǎn)擊上圖中Consumers鏈接就能看到服務(wù)消費(fèi)方的基本信息,包括服務(wù)地址等,如圖所示:
由于上面是Dubbo自帶的一個(gè)簡(jiǎn)易監(jiān)控中心,可能所展現(xiàn)的內(nèi)容并不能滿足我們的需要,所以可以根據(jù)需要開發(fā)自己的監(jiān)控中心。Dubbo也提供了監(jiān)控中心的擴(kuò)展接口,如果想要實(shí)現(xiàn)自己的監(jiān)控中心,可以實(shí)現(xiàn)接口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 {}?具體定義內(nèi)容可以查看MonitorService接口,不再累述。
總結(jié)
Dubbo還提供了其他很多高級(jí)特性,如路由規(guī)則、參數(shù)回調(diào)、服務(wù)分組、服務(wù)降級(jí)等等,而且很多特性在給出內(nèi)置實(shí)現(xiàn)的基礎(chǔ)上,還給出了擴(kuò)展的接口,我們可以給出自定義的實(shí)現(xiàn),非常方便而且強(qiáng)大。更多可以參考Dubbo官網(wǎng)用戶手冊(cè)和開發(fā)人員手冊(cè)。?
附錄:Dubbo使用Maven構(gòu)建依賴配置?
<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> View Code?
總結(jié)
以上是生活随笔為你收集整理的基于Dubbo框架构建分布式服务(三)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 纪中游记 - Day 3
- 下一篇: c语言的开方程序,详细解析C语言中的开方