原文地址:http://shiyanjun.cn/archives/1075.html
参考地址:
Dubbo服务管理与监控
我们需要在安装好管理中心和监控中心以后,再将上面的开发的提供方服务部署到物理节点上,然后就能够通过管理中心和监控中心来查看对应的详细情况。
安装Dubbo服务管理中心,需要选择一个Web容器,我们使用Tomcat服务器。首先下载Dubbo管理中心安装文件dubbo-admin-2.5.3.war,或者直接从源码构建得到该WAR文件。这里,我们已经构建好对应的WAR文件,然后进行安装,执行如下命令:
1 | cd apache-tomcat-6.0.35 |
3 | unzip ~/dubbo-admin-2.5.3.war -d webapps/ROOT |
修改配置文件~/apache-tomcat-6.0.35/webapps/ROOT/WEB-INF/dubbo.properties,指定我们的注册中心地址以及登录密码,内容如下所示:
2 | dubbo.admin.root.password=root |
3 | dubbo.admin.guest.password=guest |
然后,根据需要修改~/apache-tomcat-6.0.35/conf/server.xml配置文件,主要是Tomcat HTTP 端口号(我这里使用8083端口),完成后可以直接启动Tomcat服务器:
1 | cd ~/apache-tomcat-6.0.35/ |
然后访问地址http://10.10.4.130:8083/即可,根据配置文件指定的root用户密码,就可以登录Dubbo管理控制台。
我们将上面开发的服务提供方服务,部署到2个独立的节点上(192.168.14.1和10.10.4.125),然后可以通过Dubbo管理中心查看对应服务的状况,如图所示:
![dubbo-admin-providers](http://shiyanjuncn.b0.upaiyun.com/wp-content/uploads/2015/03/dubbo-admin-providers.png)
上图中可以看出,该服务有两个独立的节点可以提供,因为配置的集群模式为failover,如果某个节点的服务发生故障无法使用,则会自动透明地重试另一个节点上的服务,这样就不至于出现拒绝服务的情况。如果想要查看提供方某个节点上的服务详情,可以点击对应的IP:Port链接,示例如图所示:
![dubbo-admin-providers-detail](http://shiyanjuncn.b0.upaiyun.com/wp-content/uploads/2015/03/dubbo-admin-providers-detail.png)
上图可以看到服务地址:
如果我们直接暴露该地址也是可以的,不过这种直连的方式对服务消费方不是透明的,如果以后IP地址更换,也会影响调用方,所以最好是通过注册中心来隐蔽服务地址。同一个服务所部署在的多个节点上,也就对应对应着多个服务地址。另外,也可以对已经发布的服务进行控制,如修改访问控制、负载均衡相关配置内容等,可以通过上图中“消费者”查看服务消费方调用服务的情况,如图所示:
![dubbo-admin-consumers](http://shiyanjuncn.b0.upaiyun.com/wp-content/uploads/2015/03/dubbo-admin-consumers.png)
也在管理控制台可以对消费方进行管理控制。
Dubbo监控中心是以Dubbo服务的形式发布到注册中心,和普通的服务时一样的。例如,我这里下载了Dubbo自带的简易监控中心文件dubbo-monitor-simple-2.5.3-assembly.tar.gz,可以解压缩以后,修改配置文件~/dubbo-monitor-simple-2.5.3/conf/dubbo.properties的内容,如下所示:
01 | dubbo.container=log4j,spring,registry,jetty |
02 | dubbo.application.name=simple-monitor |
03 | dubbo.application.owner= |
05 | dubbo.protocol.port=7070 |
07 | dubbo.jetty.directory=${user.home}/monitor |
08 | dubbo.charts.directory=${dubbo.jetty.directory}/charts |
09 | dubbo.statistics.directory=${user.home}/monitor/statistics |
10 | dubbo.log4j.file=logs/dubbo-monitor-simple.log |
11 | dubbo.log4j.level=WARN |
然后启动简易监控中心,执行如下命令:
1 | cd ~/dubbo-monitor-simple-2.5.3 |
这里使用了Jetty Web容器,访问地址http://10.10.4.130:8087/就可以查看监控中心,Applications选项卡页面包含了服务提供方和消费方的基本信息,如图所示:
![dubbo-monitor-applications](http://shiyanjuncn.b0.upaiyun.com/wp-content/uploads/2015/03/dubbo-monitor-applications.png)
上图主要列出了所有提供方发布的服务、消费方调用、服务依赖关系等内容。
接着,查看Services选项卡页面,包含了服务提供方提供的服务列表,如图所示:
![dubbo-monitor-services](http://shiyanjuncn.b0.upaiyun.com/wp-content/uploads/2015/03/dubbo-monitor-services.png)
点击上图中Providers链接就能看到服务提供方的基本信息,包括服务地址等,如图所示:
![dubbo-monitor-providers](http://shiyanjuncn.b0.upaiyun.com/wp-content/uploads/2015/03/dubbo-monitor-providers.png)
点击上图中Consumers链接就能看到服务消费方的基本信息,包括服务地址等,如图所示:
![dubbo-monitor-consumers](http://shiyanjuncn.b0.upaiyun.com/wp-content/uploads/2015/03/dubbo-monitor-consumers.png)
由于上面是Dubbo自带的一个简易监控中心,可能所展现的内容并不能满足我们的需要,所以可以根据需要开发自己的监控中心。Dubbo也提供了监控中心的扩展接口,如果想要实现自己的监控中心,可以实现接口com.alibaba.dubbo.monitor.MonitorFactory和com.alibaba.dubbo.monitor.Monitor,其中MonitorFactory接口定义如下所示:
02 | * MonitorFactory. (SPI, Singleton, ThreadSafe) |
04 | * @author william.liangf |
07 | public interface MonitorFactory { |
15 | Monitor getMonitor(URL url); |
Monitor接口定义如下所示:
2 | * Monitor. (SPI, Prototype, ThreadSafe) |
4 | * @see com.alibaba.dubbo.monitor.MonitorFactory#getMonitor(com.alibaba.dubbo.common.URL) |
5 | * @author william.liangf |
7 | public interface Monitor extends Node, MonitorService { |
具体定义内容可以查看MonitorService接口,不再累述。
总结
Dubbo还提供了其他很多高级特性,如路由规则、参数回调、服务分组、服务降级等等,而且很多特性在给出内置实现的基础上,还给出了扩展的接口,我们可以给出自定义的实现,非常方便而且强大。更多可以参考Dubbo官网用户手册和开发手册。
附录:Dubbo使用Maven构建依赖配置
02 | < spring.version >3.2.8.RELEASE</ spring.version > |
03 | < project.build.sourceEncoding >UTF-8</ project.build.sourceEncoding > |
08 | < groupId >com.alibaba</ groupId > |
09 | < artifactId >dubbo</ artifactId > |
10 | < version >2.5.3</ version > |
13 | < groupId >org.springframework</ groupId > |
14 | < artifactId >spring</ artifactId > |
17 | < groupId >org.apache.zookeeper</ groupId > |
18 | < artifactId >zookeeper</ artifactId > |
21 | < groupId >org.jboss.netty</ groupId > |
22 | < artifactId >netty</ artifactId > |
27 | < groupId >org.springframework</ groupId > |
28 | < artifactId >spring-core</ artifactId > |
29 | < version >${spring.version}</ version > |
32 | < groupId >org.springframework</ groupId > |
33 | < artifactId >spring-beans</ artifactId > |
34 | < version >${spring.version}</ version > |
37 | < groupId >org.springframework</ groupId > |
38 | < artifactId >spring-context</ artifactId > |
39 | < version >${spring.version}</ version > |
42 | < groupId >org.springframework</ groupId > |
43 | < artifactId >spring-context-support</ artifactId > |
44 | < version >${spring.version}</ version > |
47 | < groupId >org.springframework</ groupId > |
48 | < artifactId >spring-web</ artifactId > |
49 | < version >${spring.version}</ version > |
53 | < groupId >org.slf4j</ groupId > |
54 | < artifactId >slf4j-api</ artifactId > |
55 | < version >1.6.2</ version > |
58 | < groupId >log4j</ groupId > |
59 | < artifactId >log4j</ artifactId > |
60 | < version >1.2.16</ version > |
63 | < groupId >org.javassist</ groupId > |
64 | < artifactId >javassist</ artifactId > |
65 | < version >3.15.0-GA</ version > |
68 | < groupId >com.alibaba</ groupId > |
69 | < artifactId >hessian-lite</ artifactId > |
70 | < version >3.2.1-fixed-2</ version > |
73 | < groupId >com.alibaba</ groupId > |
74 | < artifactId >fastjson</ artifactId > |
75 | < version >1.1.8</ version > |
78 | < groupId >org.jvnet.sorcerer</ groupId > |
79 | < artifactId >sorcerer-javac</ artifactId > |
80 | < version >0.8</ version > |
83 | < groupId >org.apache.zookeeper</ groupId > |
84 | < artifactId >zookeeper</ artifactId > |
85 | < version >3.4.5</ version > |
88 | < groupId >com.github.sgroschupf</ groupId > |
89 | < artifactId >zkclient</ artifactId > |
90 | < version >0.1</ version > |
93 | < groupId >org.jboss.netty</ groupId > |
94 | < artifactId >netty</ artifactId > |
95 | < version >3.2.7.Final</ version > |