预备知识先知道:dubbo总共有三种隔离方式,不然就会瞎调试。
- 注册中心 分组隔离 dubbo.registry.group=dev
- 服务分组隔离 dubbo.reference.group=ssm。用于当一个接口有多种实现时,可用使用group分组。
- 版本号分组隔离 version
dubbo-admin默认注册中心的分组名就是"dubbo",自己之前在生产者和消费者的配置文件中也没有显式指明分组,所有没问题。
当在provider、comsumer配置文件中对registry显式指明了group分组后,必须在dubbo-admin里面也指定注册分组名。
说明:注意下面的字体颜色,标黄色字体代表是服务分组,标红色字体代表注册中心分组。
dubbo-provider.xml 配置如下
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!-- 提供方应用信息,用于计算依赖关系 --> <dubbo:application name="dubbo_provider"/> <!-- 使用zookeeper注册中心暴露服务地址 --> <dubbo:registry address="zookeeper://127.0.0.1:2181" group="dev" check="false" subscribe="true" register="true"></dubbo:registry> <!-- 用dubbo协议在20880端口暴露服务 --> <dubbo:protocol name="dubbo" port="20880" /> <!-- 具体的实现bean --> <bean id="demoService" class="com.render.dubbo.DemoServiceImpl" /> <!-- 具体的实现bean --> <bean id="demoService2" class="com.render.dubbo.Demo1ServiceImpl" /> <!-- 声明需要暴露的服务接口 --> <dubbo:service ref="demoService" interface="com.render.dubbo.DemoService" group="ssm"/> <!-- 声明需要暴露的服务接口 --> <dubbo:service ref="demoService2" interface="com.render.dubbo.DemoService" group="aaa"/> </beans>
dubbo-consumer.xml 配置如下
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 --> <dubbo:application name="hehe_consumer" /> <!-- 使用zookeeper注册中心暴露服务地址 --> <!-- <dubbo:registry address="multicast://224.5.6.7:1234" /> --> <dubbo:registry address="zookeeper://127.0.0.1:2181" group="dev"/> <!-- 生成远程服务代理,可以像使用本地bean一样使用demoService --> <dubbo:reference id="consumerService" interface="com.render.dubbo.DemoService" group="ssm"/> <dubbo:reference id="consumerService2" interface="com.render.dubbo.DemoService" group="aaa"/> </beans>
更改步骤如下
- 在 tomcat里找到dubbo-admin 工程,cd dubbo-admin/webapps/ROOT/WEB-INF
修改dubbo.properties文件,添加注册中心分组
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.admin.root.password=root
dubbo.admin.guest.password=guest
dubbo.registry.group=dev ====> 注册中心分组 -
修改dubbo-admin.xml文件
<!-- <dubbo:registry address="${dubbo.registry.address}" check="false" file="false"/>-->
改为如下
<dubbo:registry address="${dubbo.registry.address}" group="${dubbo.registry.group}" check="false" file="false"/> -
重启tomcat
-
总结:如果在provider/consumer.xml中的配置了注册中心【register】分组,必须在dubbo-admin里面的注册中心也相应配置一样的名字。
参考:Dubbo服务注册运行正常但是Dubbo-Admin看不到服务(亲测可用)
实现DUBBO服务环境隔离 ===》有点深奥,以后拜读