zookeeper与dubbo结合实例

dubbo是阿里开源的一个分布式服务框架,使用它可以完成远程服务调用(RPC)。今天来写一下这种分布式开发的demo

RPC可以简单理解为,两个不同工程之间代码的中的方法相互调用的过程。

实现的基本过程:建立两个java工程provider(生产者)和consumer(消费者),一个provider负责提供服务(service),另一个consumer可以调用provider提供的服务。

环境准备

  • spring的环境(这个就不说明了)
  • dubbo的环境
<dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>dubbo</artifactId>
      <version>2.5.3</version>
    </dependency>
  • zkClient的环境
    没有zkClient环境会报错
Exception in thread "main" java.lang.NoClassDefFoundError: org/I0Itec/zkclient/exception/ZkNoNodeException
<dependency>
      <groupId>com.github.sgroschupf</groupId>
      <artifactId>zkclient</artifactId>
      <version>0.1</version>
    </dependency>

Provider服务

服务配置文件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="provider"/>

    <!-- 使用zookeeper暴露服务地址 -->
    <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"/>

    <!-- 用dubbo协议在20881端口暴露服务 -->
    <dubbo:protocol name="dubbo" port="20881"/>

    <!-- 声明需要暴露的服务接口 -->
    <dubbo:service interface="hpu.lzl.study.service.HelloService" ref="helloService"/>

    <!-- 和本地bean一样实现服务 -->
    <bean id="helloService" class="hpu.lzl.study.service.impl.HelloServiceImpl"/>

</beans>

HelloService和HelloServiceImpl是一个简单的接口与实现,这里就不粘贴了。

provider的main函数
public class Provider {
    public static void main( String[] args ) {
        ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("classpath*:provider.xml");
        classPathXmlApplicationContext.start();
        try {
            System.in.read();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Consumer工程

客户端配置文件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="consumer"  />

    <!-- 使用zookeeper暴露服务地址 -->
    <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" />

    <dubbo:reference id="helloService" interface="hpu.lzl.study.service.HelloService" />

</beans>

这里需要引入provider的HelloeService的接口类。

启动consumer的main函数
public class Consumer {
    public static void main( String[] args ) {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath*:consumer.xml");
        context.start();
        HelloService helloService = (HelloService) context.getBean("helloService");
        helloService.sayHello("lzl");
    }
}

验证调用过程

依次启动provider工程和consumer工程。并且保证dubbo的服务注册到zookeeper中,zookeeper启动端口号是配置文件中的2181端口
会发现consumer调用了provider工程中的方法。
我们还没有通过zookeeper的zkCli来查看,zookeeper所注册到的服务有哪些。
这里写图片描述
到这里,完成了简单的dubbo的分布式调用过程。
更深入的理解可以根据以下
参考博客:
http://blog.csdn.net/killuazoldyck/article/details/72773873
http://blog.csdn.net/congcong68/article/details/41113239
http://blog.csdn.net/quhongwei_zhanqiu/article/details/41683081

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于dubbo的代码实例可以通过以下步骤来实现[^2]: 1. 首先,确保你已经安装了Zookeeper,并启动了Zookeeper服务。 2. 创建一个Maven项目,并在pom.xml文件中添加DubboZookeeper的依赖。 3. 创建一个接口,定义需要暴露的服务方法。 ```java public interface HelloService { String sayHello(String name); } ``` 4. 创建一个实现类,实现接口中定义的服务方法。 ```java public class HelloServiceImpl implements HelloService { @Override public String sayHello(String name) { return "Hello, " + name + "!"; } } ``` 5. 在resources目录下创建一个dubbo配置文件dubbo-provider.xml,配置Dubbo的服务提供者。 ```xml <?xml version="1.0" encoding="UTF-8"?> <dubbo:application name="dubbo-demo-provider" /> <dubbo:registry address="zookeeper://127.0.0.1:2181" /> <dubbo:protocol name="dubbo" port="20880" /> <dubbo:service interface="com.example.HelloService" ref="helloService" /> <bean id="helloService" class="com.example.HelloServiceImpl" /> ``` 6. 创建一个启动类,用于启动Dubbo服务提供者。 ```java public class Provider { public static void main(String[] args) throws IOException { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("dubbo-provider.xml"); context.start(); System.in.read(); } } ``` 7. 创建一个消费者项目,重复步骤2和3,创建一个接口和实现类。 8. 在resources目录下创建一个dubbo配置文件dubbo-consumer.xml,配置Dubbo的服务消费者。 ```xml <?xml version="1.0" encoding="UTF-8"?> <dubbo:application name="dubbo-demo-consumer" /> <dubbo:registry address="zookeeper://127.0.0.1:2181" /> <dubbo:reference id="helloService" interface="com.example.HelloService" /> ``` 9. 创建一个启动类,用于启动Dubbo服务消费者。 ```java public class Consumer { public static void main(String[] args) { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("dubbo-consumer.xml"); HelloService helloService = (HelloService) context.getBean("helloService"); String result = helloService.sayHello("World"); System.out.println(result); } } ``` 以上是一个基于Dubbo的简单代码实例,通过配置Dubbo的服务提供者和消费者,可以实现分布式的服务调用。你可以根据自己的需求进行扩展和定制。如果你想了解更多关于Dubbo的使用和原理,可以参考Dubbo的官方文档和源码[^1]。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值