27. Dubbo原理解析-管理控制台

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

http://localhost:8080/index.htm

代码交流 2021