dubbo 簡單的provider與consumer實現


    項目用到了rest+dubbo的架構,使得服務可以在一個點死掉之后用其它點的服務來代替響應。

    這里先實現一個最簡單的dubbo消費者與提供者。官網說明:http://dubbo.io/

    首先需要解決的是dubbo的各種依賴,最簡單的實現方法即將github上dubbo項目在本地maven install一遍,所需要的各種相關依賴就到本地庫中了。但是貌似dubbo項目已經沒更新了。

    最基本的我們需要一個zookeeper,這個主要是用來調度各種服務,管理注冊中心,對zookeeper的穩定性有比較高的要求。我們寫兩個最簡單的工程,來模擬Provider和Consume。

            其中,TestDubbo用來提供服務,是Provider。而TestDubbo2用來消費服務,是Consumer。嗯,隨便取的工程名。

    在Provider中需要一個配置文件,將所提供的服務,以及zk注冊中心的地址,以及Dubbo的服務在哪個端口暴露出來。其中有接口TestApi以及它的實

    現TestApiImpl,以及一個啟動項Start。

            而之后的消費者工程,只需要配置好Consumer.xml文件,而后將其加載啟動即可調用到Provider所發布的服務。

       

           pom中需要依賴dubbo,zk相關的依賴。由於引入了父工程中的某些版本,所以此處有些版本需要讀者自行添加。服務提供者的Start采用最原始

    的ClassPathXmlApplicationContext來加載配置文件,加載之后start(),為了讓提供者保持這個狀態,可以加一行System.in.read();同理適用於服

    務消費者。

   

           准備工作完成后,啟動zk,啟動服務提供者,再啟動服務消費者,消費者使用該接口,打印出(TestApiImpl中的實現即打印一行字符,以檢驗提

    供與消費的效果)對應的字符就算OK。在其對應的可視化工具dubbo-admin中可以觀察到更多詳細的信息。(下個小節介紹)。

   

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.8.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.6</version>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
        </dependency>
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
        </dependency>
        
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
        </dependency>
        <dependency>
            <groupId>org.javassist</groupId>
            <artifactId>javassist</artifactId>
            <version>3.15.0-GA</version>
        </dependency>

 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  
        ">

    <!-- 具體的實現bean -->
    <bean id="testApiImpl" class="com.changjiang.test.TestApiImpl" />

    <!-- 提供方應用信息,用於計算依賴關系 -->
    <dubbo:application name="xixi_provider" />

    <!-- 使用multicast廣播注冊中心暴露服務地址 <dubbo:registry address="multicast://224.5.6.7:1234" 
        /> -->

    <!-- 使用zookeeper注冊中心暴露服務地址 -->
    <dubbo:registry address="zookeeper://127.0.0.1:2181" />

    <!-- 用dubbo協議在20880端口暴露服務 -->
    <dubbo:protocol name="dubbo" port="20880" />

    <!-- 聲明需要暴露的服務接口 -->
    <dubbo:service interface="com.changjiang.test.TestApi"
        ref="testApiImpl" />

</beans> 

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" />

    <!-- 生成遠程服務代理,可以像使用本地bean一樣使用demoService -->
    <dubbo:reference id="testApiImpl" interface="com.changjiang.test.TestApi" />


</beans>  

在Consumer中加載了Consumer.xml之后,直接調用Provider提供的服務,而后直接使用接口,可以檢測提供-注冊-消費是否成功。

public class App {
    public static void main(String[] args) throws IOException {
        ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext(new String[] { "Consumer.xml" });
        ac.start();
        TestApi ta = (TestApi) ac.getBean("testApiImpl");
        ta.hello();
        System.in.read();
    }
}

運行結果(沒有添加log4j.properties)

=================>

另一種啟動方式,在src/main/resources目錄下設置dubbo.properties文件

dubbo.spring.config=classpath*:spring/*.xml

而后將Provider.xml放到指定目錄src/main/resources/spring下

啟動時只需要在Main中:

public class App {
    public static void main(String[] args) {
        /**
         * 模擬啟動
         */
//        ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext(new String[] { "spring/Provider.xml" });
//        ac.start();
//        try {
//            System.in.read();
//        } catch (IOException e) {
//            // TODO Auto-generated catch block
//            e.printStackTrace();
//        }
        /**
         * main啟動
         */
        String[] ars = {};
        com.alibaba.dubbo.container.Main.main(ars);
    }
}

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM