dubbo - 多注册中心与分组聚合 demo

目录

1. 程序简单架构

2. dubbo-admin的配置

3. dubbo_parent的配置

4. dubbo_api的配置

5. dubbo_provider的配置

6. dubbo_customer的配置


 

1. 程序简单架构

本demo,以zookeeper三个服务端集群的方式作为 注册中心,使用dubbo-admin作为监控端。主要演示dubbo的多注册中心与分组聚合的代码。有所不足,敬请谅解。期间遇到了消费端找不到可用的服务端,本人将dubbo:service和dubbo:reference加入version即可解决。程序先启动zookeeper,然后是tomcat,最后是服务端和消费端。

2. dubbo-admin的配置

需要在tomcat - webapps - ROOT 下,加入dubbo-admin-2.5.4.war。

然后在ROOT - WEB-INF - dubbo.properties 文件中,修改为:

dubbo.registry.address=zookeeper://192.168.103.217:2181||zookeeper://192.168.103.217:2182||zookeeper://192.168.103.217:2183
dubbo.admin.root.password=root
dubbo.admin.guest.password=guest

唯一改动就是注册中心的url的改动。因为我要开三个zookeeper的服务端,所以要有三个url,对应每一个zookeeper的服务端。

当准备工作做好的时候,先启动三个zookeeper的服务端(我是以集群的方式)。这里有疑问的,请联系我。

接下来启动tomcat(cmd方式)。在tomcat 的 bin目录下 运行 startup.bat。

3. dubbo_parent的配置

我是以模块化的方式构建dubbo demo 的。idea 中创建模块化的文件,大家不懂的可以百度。

先来看下工程结构:

然后配置该父模块的pom.xml:(主要写了需要的依赖,)

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.3.10.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.javassist/javassist -->
        <dependency>
            <groupId>org.javassist</groupId>
            <artifactId>javassist</artifactId>
            <version>3.21.0-GA</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.jboss.netty/netty -->
        <dependency>
            <groupId>org.jboss.netty</groupId>
            <artifactId>netty</artifactId>
            <version>3.2.5.Final</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/taglibs/standard -->
        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>1.1.2</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.alibaba/dubbo -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.6.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.101tec/zkclient -->
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.9</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper -->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.13</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.11.1</version>
        </dependency>

4. dubbo_api的配置

<packaging>jar</packaging> 它的pom.xml只有这里需要改动。

这里,我写了两个接口。如下:

package com.test.service;

public interface DubboService {

    void sayHello(String name);
}
package com.test.service;

import java.util.List;

public interface MergeService {
    List<String> getMergeResult();
}

5. dubbo_provider的配置

pom.xml中,需要加入依赖:

        <dependency>
            <groupId>com.test</groupId>
            <artifactId>Dubbo_API</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

然后<packaging>war</packaging> 这里需要注意下。

它的工程结构如下:

它的实现类,读者自己定义即可。

接下来看下resources下的文件:

###set log levels###
log4j.rootLogger=info, stdout
###output to the console###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%d{dd/MM/yy hh:mm:ss:sss z}] %t %5p %c{2}: %m%n
<?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-4.3.xsd
       http://code.alibabatech.com/schema/dubbo
       http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <dubbo:application name="Dubbo_Provider"/>
    <dubbo:registry address="zookeeper://192.168.103.217:2181" id="cluster1" check="false" file="${catalina.home}/dubbo-registry/dubbo-registry.properties"/>
    <dubbo:registry address="zookeeper://192.168.103.217:2182" id="cluster2" default="false" check="false" file="${catalina.home}/dubbo-registry/dubbo-registry2.properties"/>
    <dubbo:registry address="zookeeper://192.168.103.217:2183" id="cluster3" default="false" check="false" file="${catalina.home}/dubbo-registry/dubbo-registry3.properties"/>
    <dubbo:protocol name="dubbo" port="20882"/>
    <dubbo:service interface="com.test.service.DubboService" registry="cluster1,cluster2,cluster3"
                   protocol="dubbo" group="a" ref="dubboService" version="1.0.0"/>
    <dubbo:service interface="com.test.service.DubboService" registry="cluster1,cluster2,cluster3"
                   protocol="dubbo" group="b" ref="dubboService2" version="1.0.0"/>
    <dubbo:service interface="com.test.service.DubboService" registry="cluster1,cluster2,cluster3"
                   protocol="dubbo" group="a" ref="dubboService3" version="1.0.1"/>
    <dubbo:service interface="com.test.service.MergeService" registry="cluster1"
                   protocol="dubbo" group="merge-a" ref="mergeService" version="2.0.0"/>
    <dubbo:service interface="com.test.service.MergeService" registry="cluster1,cluster2,cluster3"
                   protocol="dubbo" group="merge-b" ref="mergeService2" version="2.0.0"/>
    <bean id="dubboService" class="com.mzs.service.impl.DubboServiceImpl"/>
    <bean id="dubboService2" class="com.mzs.service.impl.DubboServiceImpl2"/>
    <bean id="dubboService3" class="com.mzs.service.impl.DubboServiceImpl3"/>
    <bean id="mergeService" class="com.mzs.service.impl.MergeServiceImpl"/>
    <bean id="mergeService2" class="com.mzs.service.impl.MergeServiceImpl2"/>

</beans>

最后看下它的测试文件:

package com.mzs.testProvider;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.io.IOException;

public class TestProvider {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("provider.xml");
        applicationContext.start();
        try {
            System.in.read();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

6. dubbo_customer的配置

工程结构如下:

看下customer.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-4.3.xsd
       http://code.alibabatech.com/schema/dubbo
       http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <dubbo:application name="Dubbo_Customer"/>
    <dubbo:registry address="zookeeper://192.168.103.217:2181" id="cluster1" check="false" file="${catalina.home}/dubbo-registry/dubbo-registry.properties"/>
    <dubbo:registry address="zookeeper://192.168.103.217:2182" id="cluster2" default="false" check="false" file="${catalina.home}/dubbo-registry/dubbo-registry2.properties"/>
    <dubbo:registry address="zookeeper://192.168.103.217:2183" id="cluster3" default="false" check="false" file="${catalina.home}/dubbo-registry/dubbo-registry3.properties"/>
    <dubbo:reference interface="com.test.service.DubboService" group="a" registry="cluster1,cluster2,cluster3"
                     timeout="500000" id="dubboService1" version="1.0.0"/>
    <dubbo:reference interface="com.test.service.DubboService" group="a" registry="cluster1,cluster2,cluster3"
                     timeout="500000" id="dubboService3" version="1.0.1"/>
    <dubbo:reference interface="com.test.service.DubboService" group="b" registry="cluster1,cluster2,cluster3"
                     timeout="500000" id="dubboService2"/>
    <dubbo:reference interface="com.test.service.MergeService" group="merge-a" registry="cluster1"
                     timeout="500000" id="mergeService" version="2.0.0"/>
    <dubbo:reference interface="com.test.service.MergeService" group="merge-b" registry="cluster1,cluster2,cluster3"
                     timeout="500000" id="mergeService2" version="2.0.0"/>

</beans>

以及它的测试文件:

package com.mzs.testCustomer;

import com.test.service.DubboService;
import com.test.service.MergeService;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.util.List;
import java.util.concurrent.TimeUnit;

public class TestCustomer {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("customer.xml");
        applicationContext.start();
        /*DubboService dubboService1 = (DubboService) applicationContext.getBean("dubboService1");
        DubboService dubboService2 = (DubboService) applicationContext.getBean("dubboService2");
        DubboService dubboService3 = (DubboService) applicationContext.getBean("dubboService3");*/
        MergeService mergeService = (MergeService) applicationContext.getBean("mergeService");
        MergeService mergeService1 = (MergeService) applicationContext.getBean("mergeService2");
        while (true) {
            try {
                TimeUnit.SECONDS.sleep(3);
                /*dubboService1.sayHello("Tom");
                dubboService2.sayHello("Tom");
                dubboService3.sayHello("Selina");*/
                List<String> list = mergeService.getMergeResult();
                System.out.println(list);
                List<String> list1 = mergeService1.getMergeResult();
                System.out.println(list1);

            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

最后先启动服务端,再启动消费端,即可成功运行程序。

猜你喜欢

转载自blog.csdn.net/qq_34561892/article/details/83744317
今日推荐