1、背景:
一、Dubbo服务正常注册到ZooKeeper
二、客户端调用Dubbo服务正常html
2、缘由:
Dubbo-Admin未配置分组信息web
3、解决步骤:
一、dubbo.properties添加分组信息:/usr/local/src/tomcat7/webapps/dubbo-admin/WEB-INF
dubbo.registry.group=/dubbo/mygroup
二、dubbo-admin.xml添加分组信息:/usr/local/src/tomcat7/webapps/dubbo-admin/WEB-INF/classes/META-INF/spring
<dubbo:registry group="${dubbo.registry.group}" address="${dubbo.registry.address}" check="false" file="false" />
三、重启tomcatspring
4、参考博客以下:http://blog.csdn.net/cfydaniel/article/details/44980193
今天从新配置了下dubbo,结果发现管理控制台上没有显示可用的服务,因为前阵子刚配置的时候是没有问题的,因而开始逐步排查。tomcat
项目注册中心用的zookeeper集群,provider是采用jar包方式启动的,consumer在tomcat容器内运行,而且consumer已经能够消费到provider提供的服务了,说明注册中心已经里面已经有服务注册。经过zookeeper客户端链接到zk服务器上,也能够看到建立的服务节点服务器
根目录下有paopao,zookeeper两个目录,其中paopao是根据配置中注册中心registry的group属性分组标识而建立的,zookeeper是zk默认的节点,paopao下面有两个已经注册的服务节点。app
而后查看dubbo-admin的配置,dubbo的管理控制台是在单独的tomcat下运行的,安装及配置能够参考http://dubbo.io/Administrator+Guide-zh.htm,找到webapps/ROOT/WEB-INF/dubbo.properties文件,其内容以下:webapp
dubbo.registry.address=zookeeper://192.168.199.191:2181?backup=192.168.199.192:2181,192.168.199.193:2181
dubbo.admin.root.password=Daniel
dubbo.admin.guest.password=guest
猛地发现registry没有配置group分组!本身以前在生产者和消费者的配置文件中也没有显式指明分组,默认的group就为dubbo。如今因为在服务提供的配置文件中对registry显式指明了group分组,所以管理控制台的配置中若是没有声明group与provider、consumer的group一致,那么就找不到对应的服务。
因而修改dubbo.properties文件,添加注册中心分组:ide
dubbo.registry.group=paopao
满怀着激动的心情重启了服务,结果发现管理台界面仍是没有找到服务!而后上网查找可是无奈网上dubbo相关的文档和讨论真的太少了,后来经群里一个朋友的提醒,查看了${TOMCAT_HOME}/webapps/ROOT/WEB-INF/classes/META-INF/spring下的dubbo-admin.xml文件,dubbo管理控制台在启动的时候会加载该xml文件并读取里面的配置信息初始化dubbo和zookeeper,dubbo-admin.xml内容以下:ui
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
<property name="ignoreResourceNotFound" value="true" />
<property name="locations">
<list>
<value>/WEB-INF/dubbo.properties</value>
<value>file://${user.home}/dubbo.properties</value>
</list>
</property>
</bean>
<dubbo:application name="dubbo-admin" />
<dubbo:registry address="${dubbo.registry.address}" check="false" file="false" />
<dubbo:reference id="registryService" interface="com.alibaba.dubbo.registry.RegistryService" check="false" />
<bean id="configService" class="com.alibaba.dubbo.governance.service.impl.ConfigServiceImpl" />
<bean id="consumerService" class="com.alibaba.dubbo.governance.service.impl.ConsumerServiceImpl" />
<bean id="overrideService" class="com.alibaba.dubbo.governance.service.impl.OverrideServiceImpl" />
<bean id="ownerService" class="com.alibaba.dubbo.governance.service.impl.OwnerServiceImpl" />
<bean id="providerService" class="com.alibaba.dubbo.governance.service.impl.ProviderServiceImpl" />
<bean id="routeService" class="com.alibaba.dubbo.governance.service.impl.RouteServiceImpl" />
<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" />
</beans> .net
能够看到,该文件居然默认是没有registry的group属性的,所以只在dubbo.properties中添加分组配置根本不起做用。因而修改dubbo-admin.xml文件中的<dubbo:registry>项为:
<dubbo:registry group="${dubbo.registry.group}" address="${dubbo.registry.address}" check="false" file="false" />
保存后重启tomcat实例,发现已经注册的服务提供者和消费者信息,一切OK!
下面把provider和consumer的主要配置信息也贴出来供你们参考:
provider.xml:
<!-- 提供方应用信息,用于计算依赖关系 --> <dubbo:application name="paopao-provider" /> <!-- 使用zookeeper注册中心暴露服务地址 --> <dubbo:registry group="paopao" address="zookeeper://192.168.199.191:2181?backup=192.168.199.192:2181,192.168.199.193:2181"/> <!-- 监控中心配置,从注册中心发现监控中心地址 --> <dubbo:monitor protocol="registry"/> <!-- 用dubbo协议在20880端口暴露服务 --> <dubbo:protocol name="dubbo" port="20880" /> <!-- 扫描注解包路径,多个包用逗号分隔,不填pacakge表示扫描当前ApplicationContext中全部的类 --> <dubbo:annotation package="com.zhilin.paopao.provider.service"/> consumer.xml:<pre name="code" class="html"> <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方同样 --> <dubbo:application name="consumer-of-app" /> <!-- 使用zookeeper注册中心暴露发现服务地址 --> <dubbo:registry group="paopao" address="zookeeper://192.168.199.191:2181?backup=192.168.199.192:2181,192.168.199.193:2181"/> <!-- 监控中心配置,从注册中心发现监控中心地址 --> <dubbo:monitor protocol="registry"/> <!-- 生成远程服务代理 --> <dubbo:reference version="1.0.0" id="userService" interface="com.zhilin.paopao.service.UserService" />