Dubbo的dubbo-admin模块是后台管理系统,它的MVC框架式基于webx3的,webx是阿里巴巴开源出来基于页面驱动的mvc框架, webx在阿里内部广泛使用。
Webx是基于turbine发展而来逐渐成为一个功能强大扩展性强的mvc框架,利用约定大于配置原则,虽说使用简单,但是也有很多潜在规则在里面。Webx作为除了阿里以外一个小众框架学习起来还是很有成本的,再说dubbo中又对webx进行一层restful改造,使大家即时按官方文档http://www.openwebx.org/ 学习也很难很快看懂。这里不做webx的相关介绍,因为一时半会没法讲,主要讲下dubbo-admin基本流程,方便有的朋友对webx不爽想迁移到springmvc或者struts之上。
dubbo-admin web应用配置
属性文件路径dubbo\dubbo-admin\src\main\webapp\WEB-INF\dubbo.properties
dubbo.registry.address=
zookeeper://127.0.0.1:2181
dubbo.admin.root.password=
root
dubbo.admin.guest.password=
guest
这里需要指定注册中心地址,因为对于服务的治理需要从注册中心获取相关信息,如提供者、消费者、路由信息、权重等等
这里后台权限验证也简单,用户也可以修改针对数据库,或者登陆中心的权限验证。
Sping的bean配置路径:
dubbo\dubbo-admin\src\main\resources\META-INF\spring\dubbo-admin.xml
下面我们来几个比较关键的配置
<
dubbo:registry
address="${dubbo.registry.address}"
check="false"
file="false"
/>
<
dubbo:reference
id="registryService"
interface="com.alibaba.dubbo.registry.RegistryService"
check="false"
/>
<
bean
id="userService"
class="com.alibaba.dubbo.governance.service.impl.UserServiceImpl"
<
property
name="rootPassword"
value="${dubbo.admin.root.password}"
/>
<
property
name="guestPassword"
value="${dubbo.admin.guest.password}"
/>
</
bean
<
bean
id="governanceCache"
class="com.alibaba.dubbo.governance.sync.RegistryServerSync"
/>
1)Dubbo:registry/用来指定注册中心的地址,这个由properties文件中提供
2)引用registryService服务, 这个在zookeeper为注册中心其实并没有引用什么远程的registryService服务,而是创建了代理通过ZookeeperRegistry来操作zookeeper的节点数据
3)RegistryServerSync这个bean用来订阅同步注册中心数据
RegistryServerSync实现了InitializingBean接口,这个接口是spring提供的一个回调在spring初始化bean的时当bean的参数都被设置的时候调用,这个的方法实现为:registryService.subscribe(SUBSCRIBE,this); 向注册中心订阅
如图url订阅了所有的信息
同时RegistryServerSync实现了NotifyListener接口,这个接口用来当注册中心数据发生变化后回调订阅用户更新信息,是注册中心反向推送的实现。
RegistryServerSync的notify(urls)实现主要是分类缓存注册中心信息,供页面是使用
4)OverrideServiceImpl实现 覆盖注册中心url,主要流程如下
registryService.unregister(oldOverride);
registryService.register(newOverride);
当动态配置,负载均衡,权重配置等会调用此接口更新注册中心url
5)RouteServiceImpl 用来新增,修改,删除路由信息
更新路由的流程如下,跟上面其实一样,也是覆盖注册中心路由信息
registryService.unregister(oldRoute);
registryService.register(route.toUrl());
启动后台服务
Dubbo内嵌jetty作为后台服务的web容器,测试的利用mvn命令很方便启动debug
到dubbo\dubbo\dubbo-admin目录下执行mvn jetty:run 或者mvndebug jetty:run
默认访问端口是8080