Dubbox 環境搭建

第一章:Dubbox簡介php

 

Dubbox是一個開源的RPC(Remote ProcedureCall Protocol)遠程調用框架,是由dangdang對阿里的Dubbo的升級,能夠被視爲Dubbo的加強版,基本架構沒有變更,升級spring2.x到spring3.x,支持restful風格的調用調試方式,豐富了序列化的方式,提升了序列化的性能。git

 

Dubbox的Github官網:github

https://github.com/dangdangdotcom/dubboxweb

 

 

 

 

第二章 環境搭建(基於註冊中心是Zookeeper的搭建)spring

  

2.1 dubbo-admin控制檯的安裝apache

 

2.1.1打開dubbox的官網https://github.com/dangdangdotcom/dubboxwindows

點擊Clone or download 咱們選擇最原始的Download ZIP,當前的stable版本是2.8.4api

 

2.1.2下載到某個文件夾下,解壓文件夾:瀏覽器

 

2.1.3 解壓dubbox-master.ziptomcat

 

2.1.4按住鍵盤shift 鼠標右擊,選擇命令窗口,進入maven編譯 :

 

mvn install -Dmaven.test.skip=true

 

編譯安裝大概須要4~5分鐘,編譯安裝成功以後顯示以下:

 

好了,到此爲止,dubbox2.8.4就算是編譯成功了,接下來咱們要先搭建dubbox的控制檯,由於可視化是咱們最喜歡的模式了

 

2.1.5進入剛纔的文件夾D:\dubboxstudy\dubbox-master\dubbo-admin\target

 

找到dubbo-admin-2.8.4.war文件,由於這是一個war文件,因此咱們就使用tomcat啓動,下載apache-tomcat-7.0.40-windows-x64.zip到咱們dubbox study目錄

 

解壓apache-tomcat.zip,而後將剛纔的dubbo-admin-2.8.4.war複製到D:\dubboxstudy\apache-tomcat-7.0.40\webapps文件夾下

 

由於dubbo的註冊中心和管理控制檯是依賴zookeeper,因此咱們在測試環境下,須要啓動一個zookeeper的實例,關於zookeeperwindow環境下的搭建就不贅述了,詳細參考:

http://blog.csdn.net/morning99/article/details/40426133

 

 

2.1.6啓動dubbo-admin控制檯以前,先啓動一個zookeeper實例(由於只是測試,因此就啓動zookeeper集羣了):

 

 

2.1.7啓動tomcat,進入D:\dubbox study\apache-tomcat-7.0.40\bin,雙擊startup.bat

 

上圖表示啓動成功,啓動成功以後,咱們會發現D:\dubbox study\apache-tomcat-7.0.40\webapps下多了一個文件夾dubbo-admin-2.8.4,進入

D:\dubboxstudy\apache-tomcat-7.0.40\webapps\dubbo-admin-2.8.4\WEB-INF,打開dubbo.properties:

 

 

能夠看到dubbo默認的註冊機制是zookeeper,地址也是本地地址:127.0.0.1:2181,假如你此時zookeeper的實例的地址不是127.0.0.1:2181,或者註冊機制是Redis的話,須要修改dubbo.properties的配置,此處就不作修改了

 

 

2.1.8打開瀏覽器。輸入http://localhost:8080/dubbo-admin-2.8.4/,帳戶密碼是root/root.就能夠看到頁面了

 

2.2 dubbo的Provider/Consumer 消費者和提供者的Demo代碼編寫

 

2.2.1環境準備JDK1.7 +Eclipse(STS) + Maven3.x

 

 

2.2.2新建WorkingSet

 

點擊finish:

 

2.2.3新建maven項目

 

建好以後的目錄結構:

 

2.2.4在bazinga-provider和bazinga-consumer的pom.xml中引入dubbox的依賴(暫時使用2.8.3的依賴,相對簡單一點):

  1.  
    <properties>
  2.  
    <dubbox.version>2.8.3</dubbox.version>
  3.  
    <slf4j.version>1.7.5</slf4j.version>
  4.  
    <zookeeper.version>3.4.6</zookeeper.version>
  5.  
    </properties>
  6.  
    <dependencies>
  7.  
    <dependency>
  8.  
    <groupId>com.alibaba</groupId>
  9.  
    <artifactId>dubbo</artifactId>
  10.  
    <version>${dubbox.version}</version>
  11.  
    </dependency>
  12.  
    <dependency>
  13.  
    <groupId>org.slf4j</groupId>
  14.  
    <artifactId>slf4j-api</artifactId>
  15.  
    <version>${slf4j.version}</version>
  16.  
    </dependency>
  17.  
    <dependency>
  18.  
    <groupId>org.apache.zookeeper</groupId>
  19.  
    <artifactId>zookeeper</artifactId>
  20.  
    <version>${zookeeper.version}</version>
  21.  
    <exclusions>
  22.  
    <exclusion>
  23.  
    <groupId>io.netty</groupId>
  24.  
    <artifactId>netty</artifactId>
  25.  
    </exclusion>
  26.  
    <exclusion>
  27.  
    <groupId>org.slf4j</groupId>
  28.  
    <artifactId>slf4j-api</artifactId>
  29.  
    </exclusion>
  30.  
    <exclusion>
  31.  
    <groupId>log4j</groupId>
  32.  
    <artifactId>log4j</artifactId>
  33.  
    </exclusion>
  34.  
    <exclusion>
  35.  
    <groupId>org.slf4j</groupId>
  36.  
    <artifactId>slf4j-log4j12</artifactId>
  37.  
    </exclusion>
  38.  
    <exclusion>
  39.  
    <groupId>jline</groupId>
  40.  
    <artifactId>jline</artifactId>
  41.  
    </exclusion>
  42.  
    </exclusions>
  43.  
    </dependency>
  44.  
    <dependency>
  45.  
    <groupId>org.slf4j</groupId>
  46.  
    <artifactId>slf4j-api</artifactId>
  47.  
    <version>${slf4j.version}</version>
  48.  
    </dependency>
  49.  
    <dependency>
  50.  
    <groupId>com.101tec</groupId>
  51.  
    <artifactId>zkclient</artifactId>
  52.  
    <version>0.2</version>
  53.  
    </dependency>
  54.  
    <dependency>
  55.  
    <groupId>ch.qos.logback</groupId>
  56.  
    <artifactId>logback-classic</artifactId>
  57.  
    <version>1.0.13</version>
  58.  
    </dependency>
  59.  
    </dependencies>

2.2.5在bazinga-provider編寫調用接口IDemoService:

  1.  
    package org.bazinga.service;
  2.  
     
  3.  
    public interface IDemoService {
  4.  
     
  5.  
    public String sayHello();
  6.  
     
  7.  
    }

具體的實現:

 

  1.  
    package org.bazinga.service.impl;
  2.  
     
  3.  
    import org.bazinga.service.IDemoService;
  4.  
     
  5.  
    public class IDemoServiceImpl implements IDemoService {
  6.  
     
  7.  
    public String sayHello() {
  8.  
    return "hello dubbox";
  9.  
    }
  10.  
     
  11.  
    }

 

2.2.6在src/main/resources下配置dubbo基於Spring的配置文件spring-dubbo-provider.xml,在這裏須要配置註冊中心的地址,通訊的協議方式,服務提供者的應用名,最後就是最關鍵的須要暴露的服務,咱們這裏就是

 

  1.  
    <?xml version="1.1" encoding="UTF-8"?>
  2.  
    <beans xmlns="http://www.springframework.org/schema/beans"
  3.  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
  4.  
    xsi:schemaLocation="http://www.springframework.org/schema/beans
  5.  
    http://www.springframework.org/schema/beans/spring-beans.xsd
  6.  
    http://code.alibabatech.com/schema/dubbo
  7.  
    http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
  8.  
     
  9.  
    <dubbo:application owner="lyncc" name="bazinga-app" />
  10.  
    <!--zookeeper註冊中心 -->
  11.  
    <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"/>
  12.  
     
  13.  
    <dubbo:protocol name ="dubbo" port="20880" />
  14.  
    <!-- 發佈這個服務 -->
  15.  
    <dubbo:service protocol="dubbo" timeout="4000" connections="100" interface ="org.bazinga.service.IDemoService" ref="demoService" />
  16.  
    <!-- 和本地bean同樣實現服務 -->
  17.  
    <bean id="demoService" class="org.bazinga.service.impl.IDemoServiceImpl" />
  18.  
     
  19.  
    </beans>

 

細心的你會發現左側有報錯的提示:

 

這個報錯是由於不識別dubbo的命名空間,因此須要導入xsd文件,dubbo.xsd文件源碼中有,網上也能夠下載到,下載好或者在源碼中找到以後,選擇Windw->Perferences->XML->XMLCatelog->User Specifed Entries

 

點擊add,點擊FileSystem 選擇你下載好的dubbo.xsd,輸入key值,key值要與schema值同樣,點擊OK:

 

一路保存剛纔的設置,從新打開spring-dubbo-provider.xml文件,能夠發現報錯消失。到此爲止,dubbox的服務提供者端的代碼已經編寫完畢,咱們寫個測試類測試一下:

  1.  
    package org.bazinga.service.test;
  2.  
     
  3.  
    import org.springframework.context.support.ClassPathXmlApplicationContext;
  4.  
     
  5.  
    public class DubboxProviderDemoService {
  6.  
     
  7.  
    public static void main(String[] args) throws InterruptedException {
  8.  
    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
  9.  
    "spring-dubbo-provider.xml");
  10.  
    context.start();
  11.  
    Thread.sleep( 2000000l);
  12.  
    }
  13.  
     
  14.  
    }

 

啓動main函數以後,會發現dubbo-admin的控制檯中提供者發現了該服務:



2.2.7服務提供者模塊的編寫,服務消費者只要有服務的接口就能夠了,把服務提供者的接口複製到bazinga-consumer項目的同一個package下,注意必須放在同一個package下,也就是說服務消費者和服務提供者的接口的路徑必須徹底相同,由於這是服務的惟一標識,是一一對應的:



2.2.8服務消費端dubbo的配置文件的編寫spring-dubbo-consumer.xml,由於dubbo具備服務自動發現的功能,因此咱們這邊只須要配置註冊中心,服務消費者的名字,和須要訂閱的服務接口信息,以下:

  1.  
    <?xml version="1.1" encoding="UTF-8"?>
  2.  
    <beans xmlns="http://www.springframework.org/schema/beans"
  3.  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
  4.  
    xsi:schemaLocation="http://www.springframework.org/schema/beans
  5.  
    http://www.springframework.org/schema/beans/spring-beans.xsd
  6.  
    http://code.alibabatech.com/schema/dubbo
  7.  
    http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
  8.  
     
  9.  
    <dubbo:application owner="lyncc" name="bazinga-consumer" />
  10.  
    <!--zookeeper註冊中心 -->
  11.  
    <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"/>
  12.  
     
  13.  
    <dubbo:reference id="demoService" interface="org.bazinga.service.IDemoService"/>
  14.  
     
  15.  
    </beans>
  16.  
     

2.2.9編寫測試類DubboConsumerDemoService:

  1.  
    package org.bazinga.service.test;
  2.  
     
  3.  
    import org.bazinga.service.IDemoService;
  4.  
    import org.springframework.context.support.ClassPathXmlApplicationContext;
  5.  
     
  6.  
    public class DubboConsumerDemoService {
  7.  
     
  8.  
    public static void main(String[] args) throws InterruptedException {
  9.  
    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
  10.  
    "spring-dubbo-consumer.xml");
  11.  
    context.start();
  12.  
    IDemoService demoService = (IDemoService)context.getBean( "demoService");
  13.  
    System.out.println(demoService.sayHello());
  14.  
    Thread.sleep( 2000000l);
  15.  
    }
  16.  
     
  17.  
    }

先運行DubboxProviderDemoService的狀況下,啓動DubboConsumerDemoService的main函數,運行結果:



同時控制檯admin頁面也會顯示消費者的信息:

 

好了,到此爲止,最簡單的Dubbo的Helloworld搭建完畢

 

 

2.3 本章小結

 

  本章簡單的搭建了一個Dubbo的Demo,配置了dubbo-admin控制頁面平臺,編寫了一個簡單的Hello World,服務提供者向zookeeper註冊中心註冊服務,服務消費者從註冊中心訂閱服務,發現服務的暴露地址,完成遠程調用,下一個章節,咱們稍微深刻體驗一下dubbo給咱們帶來的豐富的RPC的一些特性

相關文章
相關標籤/搜索