Dubbo+ZooKeeper的简单应用

1.我们要实现什么

Provider: 暴露服务的服务提供方,我这里创建名为news-provider的Module来实现。
Consumer: 调用远程服务的服务消费方,我这里创建名为news-consumer的Module来实现。
Registry: 服务注册与发现的注册中心,使用Zookeeper来实现,具体实现可参考我之前文章。
Monitor: 统计服务的调用次调和调用时间的监控中心,Dubbo客户端,Dubbo客户端安装可参考我之前文章。
Container: 服务运行容器。

Provider提供服务,并上传到Register,Monitor可以对上传上来的服务进行管理,Consumer可以通过Register拿到Provider提供的服务的相关信息,进行消费

2.具体实现

1.创建一个普通Maven工程dubboservice,有3个子模块,服务接口模块news-ervice,定义了服务的规范;服务提供者模块news-provider,依赖服务接口模块,实现其规范,提供服务;服务消费者模块news-consumer,依赖服务接口模块,通过服务接口从注册中心拿到对应的服务。

工程pom.xml

<dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.6.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.10</version>
        </dependency>
        <!--zkclient:简化原生zk操作-->
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
        </dependency>
        <!--curator:ZK连接管理、SESSION失效等一些异常问题处理-->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>2.8.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>2.8.0</version>
        </dependency>
    </dependencies>

news-provider和news-consumer模块的pom.xml 

<dependencies>
        <dependency>
            <groupId>org.staybug</groupId>
            <artifactId>news-service</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

2.news-service模块定义服务接口

package org.staybug.service;

import java.util.List;

public interface NewService {
    List<String>  getTop100News();
}

3.news-provider模块实现服务接口,对外提供服务

在resources目录下创建spring-news-provider.xml配置文件,配置如下信息

<dubbo:application name="news-provider" owner="zxs" organization="staybug"></dubbo:application>
    <!--定义注册中心地址-->
    <dubbo:registry protocol="zookeeper" address="192.168.2.10:2181"></dubbo:registry>
    <!--定义服务本地占用端口,默认端口为20880-->
    <dubbo:protocol name="dubbo" port="10084"></dubbo:protocol>
    <!--通过dubbo发布服务
        服务提供者暴露服务配置
        interface:服务接口名
        ref:服务实现引用-->
    <dubbo:service interface="org.staybug.service.NewService" ref="newsServiceImpl"/>
    <bean id="newsServiceImpl" class="org.staybug.service.impl.NewServiceImpl"/>

实现服务接口 

public class NewServiceImpl implements NewService {
    public List<String> getTop100News() {
        List<String> newsTitles = new ArrayList<String>();
        newsTitles.add("您的文章已进入人工审核阶段,请您耐心等待,如若24小时内未审核通过,请联系客服,谢谢。");
        return newsTitles;
    }
}

对外提供服务

public class ProviderApp {
    public static void main(String[] args){
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring-news-provider.xml");
        //启动Spring容器
        context.start();
        try {
            Thread.sleep(Integer.MAX_VALUE);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    }
}

4.news-consumer模块进行消费 

在resources目录下创建spring-news-consumer.xml配置文件,配置如下信息

<!--配置消费者的应用信息-->
    <dubbo:application name="news-consumer" owner="zxs" organization="staybug"/>
    <!--定义消费者消费服务需要访问的注册中心地址,和生产者相同-->
    <dubbo:registry protocol="zookeeper" address="192.168.2.10:2181"/>
    <!--引用生产者服务,服务消费者引用服务配置
        1.从注册中心中找到接口服务名为org.staybug.service.NewService的生产者服务地址:
        dubbo://192.168.159.1:10080/org.staybug.service.NewService?anyhost=true
        &application=news-provider&dubbo=2.6.2&generic=false&interface=org.staybug.service.NewService
        &methods=getTop100News&organization=staybug&owner=zxs&pid=6996&side=provider×tamp=1588247739218
        2.解析生产服务地址,获取ip、端口、接口名、方法名
        3.选择其中一个生产者,发起RPC调用,返回结果
    -->
    <dubbo:reference interface="org.staybug.service.NewService" id="newsService"/>

 进行消费

public class ConsumerApp {
    public static void main(String[] args){
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring-news-consumer.xml");
        NewService newService= context.getBean(NewService.class);
        while (true){
            System.out.println();
            List<String> top100News = newService.getTop100News();
            for (String newItem : top100News){
                System.out.println(newItem);
            }
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

5,控制台就会打印如下信息

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值