第一章: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的依賴,相對簡單一點):
-
-
<dubbox.version>2.8.3</dubbox.version>
-
<slf4j.version>1.7.5</slf4j.version>
-
<zookeeper.version>3.4.6</zookeeper.version>
-
-
-
-
<groupId>com.alibaba</groupId>
-
<artifactId>dubbo</artifactId>
-
<version>${dubbox.version}</version>
-
-
-
<groupId>org.slf4j</groupId>
-
<artifactId>slf4j-api</artifactId>
-
<version>${slf4j.version}</version>
-
-
-
<groupId>org.apache.zookeeper</groupId>
-
<artifactId>zookeeper</artifactId>
-
<version>${zookeeper.version}</version>
-
-
-
<groupId>io.netty</groupId>
-
<artifactId>netty</artifactId>
-
-
-
<groupId>org.slf4j</groupId>
-
<artifactId>slf4j-api</artifactId>
-
-
-
-
<artifactId>log4j</artifactId>
-
-
-
<groupId>org.slf4j</groupId>
-
<artifactId>slf4j-log4j12</artifactId>
-
-
-
-
<artifactId>jline</artifactId>
-
-
-
-
-
<groupId>org.slf4j</groupId>
-
<artifactId>slf4j-api</artifactId>
-
<version>${slf4j.version}</version>
-
-
-
<groupId>com.101tec</groupId>
-
<artifactId>zkclient</artifactId>
-
-
-
-
<groupId>ch.qos.logback</groupId>
-
<artifactId>logback-classic</artifactId>
-
<version>1.0.13</version>
-
-
2.2.5在bazinga-provider編寫調用接口IDemoService:
-
package org.bazinga.service;
-
-
public interface IDemoService {
-
-
public String sayHello();
-
-
具體的實現:
-
package org.bazinga.service.impl;
-
-
import org.bazinga.service.IDemoService;
-
-
public class IDemoServiceImpl implements IDemoService {
-
-
public String sayHello() {
-
-
-
-
2.2.6在src/main/resources下配置dubbo基於Spring的配置文件spring-dubbo-provider.xml,在這裏須要配置註冊中心的地址,通訊的協議方式,服務提供者的應用名,最後就是最關鍵的須要暴露的服務,咱們這裏就是
-
<?xml version="1.1" 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 owner="lyncc" name="bazinga-app" />
-
-
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"/>
-
-
<dubbo:protocol name ="dubbo" port="20880" />
-
-
<dubbo:service protocol="dubbo" timeout="4000" connections="100" interface ="org.bazinga.service.IDemoService" ref="demoService" />
-
-
<bean id="demoService" class="org.bazinga.service.impl.IDemoServiceImpl" />
-
-
細心的你會發現左側有報錯的提示:
這個報錯是由於不識別dubbo的命名空間,因此須要導入xsd文件,dubbo.xsd文件源碼中有,網上也能夠下載到,下載好或者在源碼中找到以後,選擇Windw->Perferences->XML->XMLCatelog->User Specifed Entries
點擊add,點擊FileSystem 選擇你下載好的dubbo.xsd,輸入key值,key值要與schema值同樣,點擊OK:
一路保存剛纔的設置,從新打開spring-dubbo-provider.xml文件,能夠發現報錯消失。到此爲止,dubbox的服務提供者端的代碼已經編寫完畢,咱們寫個測試類測試一下:
-
package org.bazinga.service.test;
-
-
import org.springframework.context.support.ClassPathXmlApplicationContext;
-
-
public class DubboxProviderDemoService {
-
-
public static void main(String[] args) throws InterruptedException {
-
ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext(
-
"spring-dubbo-provider.xml");
-
-
-
-
-
啓動main函數以後,會發現dubbo-admin的控制檯中提供者發現了該服務:
2.2.7服務提供者模塊的編寫,服務消費者只要有服務的接口就能夠了,把服務提供者的接口複製到bazinga-consumer項目的同一個package下,注意必須放在同一個package下,也就是說服務消費者和服務提供者的接口的路徑必須徹底相同,由於這是服務的惟一標識,是一一對應的:
2.2.8服務消費端dubbo的配置文件的編寫spring-dubbo-consumer.xml,由於dubbo具備服務自動發現的功能,因此咱們這邊只須要配置註冊中心,服務消費者的名字,和須要訂閱的服務接口信息,以下:
-
<?xml version="1.1" 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 owner="lyncc" name="bazinga-consumer" />
-
-
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"/>
-
-
<dubbo:reference id="demoService" interface="org.bazinga.service.IDemoService"/>
-
-
-
2.2.9編寫測試類DubboConsumerDemoService:
-
package org.bazinga.service.test;
-
-
import org.bazinga.service.IDemoService;
-
import org.springframework.context.support.ClassPathXmlApplicationContext;
-
-
public class DubboConsumerDemoService {
-
-
public static void main(String[] args) throws InterruptedException {
-
ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext(
-
"spring-dubbo-consumer.xml");
-
-
IDemoService demoService = (IDemoService)context.getBean(
"demoService");
-
System.out.println(demoService.sayHello());
-
-
-
-
先運行DubboxProviderDemoService的狀況下,啓動DubboConsumerDemoService的main函數,運行結果:
同時控制檯admin頁面也會顯示消費者的信息:
好了,到此爲止,最簡單的Dubbo的Helloworld搭建完畢
2.3 本章小結
本章簡單的搭建了一個Dubbo的Demo,配置了dubbo-admin控制頁面平臺,編寫了一個簡單的Hello World,服務提供者向zookeeper註冊中心註冊服務,服務消費者從註冊中心訂閱服務,發現服務的暴露地址,完成遠程調用,下一個章節,咱們稍微深刻體驗一下dubbo給咱們帶來的豐富的RPC的一些特性