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

發佈了206 篇原創文章 · 獲贊 82 · 訪問量 38萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章