dubbo 使用 學(xué)習(xí)二(spring+dubbo+zookeeper單機(jī)服務(wù))

學(xué)習(xí)目錄在上一篇中有了,這篇我們來(lái)寫(xiě)一個(gè)本地的單服務(wù)的demo,下面我們看看需要什么!??!

1、zookeeper的安裝:

(1)、zookeeper 的安裝很簡(jiǎn)單,下載架包解壓縮,解壓縮后的目錄下有個(gè)conf目錄也就是zookeeper的配置文件在該目錄下,該目錄下有一個(gè)zoo_sample.cfg 文件,復(fù)制一個(gè)修改為zoo.cfg,像我們這里是單服務(wù)的所以這里的配置只需要修改dataDir的目錄就可以了其他的可以不用修改,dataDir的目錄可以自己隨便定義?。?!

2、服務(wù)提供者

創(chuàng)建一個(gè)maven 工程,配置spring ,dubbo,zookeeper等相關(guān)的jar包,下面來(lái)具體看看!

(1)、目錄結(jié)構(gòu)

(2)、我們配置pom.xml下載我們需要的jar包,pom.xml配置文件如下:

[html]view plaincopyprint?

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0?http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

com.test

dubboser

0.0.1

jar

dubboserver

http://maven.apache.org

UTF-8

3.1.4.RELEASE

1.6.6

junit

junit

3.8.1

test


org.springframework

spring-aop

${spring.version}

org.springframework

spring-asm

${spring.version}

org.springframework

spring-core

${spring.version}

org.springframework

spring-beans

${spring.version}

org.springframework

spring-context

${spring.version}

org.springframework

spring-expression

${spring.version}



log4j

log4j

1.2.16

org.slf4j

slf4j-api

${slf4j.version}

org.slf4j

slf4j-log4j12

${slf4j.version}


com.alibaba

dubbo

2.5.3


com.github.sgroschupf

zkclient

0.1


org.apache.zookeeper

zookeeper

3.4.5

dubbo-demo


org.apache.maven.plugins

maven-compiler-plugin

2.1

1.5

1.5

UTF-8

false


xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

com.test

dubboser

0.0.1

jar

dubboserver

http://maven.apache.org

UTF-8

3.1.4.RELEASE

1.6.6

junit

junit

3.8.1

test


org.springframework

spring-aop

${spring.version}

org.springframework

spring-asm

${spring.version}

org.springframework

spring-core

${spring.version}

org.springframework

spring-beans

${spring.version}

org.springframework

spring-context

${spring.version}

org.springframework

spring-expression

${spring.version}



log4j

log4j

1.2.16

org.slf4j

slf4j-api

${slf4j.version}

org.slf4j

slf4j-log4j12

${slf4j.version}


com.alibaba

dubbo

2.5.3


com.github.sgroschupf

zkclient

0.1


org.apache.zookeeper

zookeeper

3.4.5

dubbo-demo


org.apache.maven.plugins

maven-compiler-plugin

2.1

1.5

1.5

UTF-8

false


(3)、寫(xiě)服務(wù)接口,服務(wù)接口的實(shí)現(xiàn)

[java]view plaincopyprint?

packagecom.test.dubboser;

publicinterfaceServiceDemo?{

publicString?say(String?str);

}

package com.test.dubboser;

public interface ServiceDemo {

public String say(String str);

}

[java]view plaincopyprint?

packagecom.test.dubboser;

publicclassServiceImpimplementsServiceDemo{

publicString?say(String?str)?{

System.err.println("server:?"+str);

return"hello:?"+str;

}

}

package com.test.dubboser;

public class ServiceImp implements ServiceDemo{

public String say(String str) {

System.err.println("server: "+str);

return "hello: "+str;

}

}

(4)、向注冊(cè)中心注冊(cè)服務(wù)(將接口暴露出去),這里的注冊(cè)中心是zookeeper

下面我們來(lái)看看,服務(wù)的配置也就是applicationProvider.xml這個(gè)配置文件中配置……

[html]view plaincopyprint?


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

">











ref="demoService"/>



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

">











ref="demoService" />


(5)、所有的準(zhǔn)備都好了,下面我們啟動(dòng)服務(wù)提供者(提前啟動(dòng)zookeeper)

[java]view plaincopyprint?

packagecom.test.dubboser;

importjava.io.IOException;

importorg.springframework.context.support.ClassPathXmlApplicationContext;

publicclassMain?{

publicstaticvoidmain(String[]?args)throwsIOException?{

ClassPathXmlApplicationContext?context?=newClassPathXmlApplicationContext(newString[]?{"applicationProvider.xml"});

context.start();

System.out.println("按任意鍵退出");

System.in.read();

}

}

package com.test.dubboser;

import java.io.IOException;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {

public static void main(String[] args) throws IOException {

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "applicationProvider.xml" });

context.start();

System.out.println("按任意鍵退出");

System.in.read();

}

}

ok這樣我們的服務(wù)提供者就好了,是不是很亂,我感覺(jué)也有點(diǎn),所以之后會(huì)有個(gè)自己的小總結(jié)……

我們的服務(wù)提供者好了,我們來(lái)看看我們的服務(wù)消費(fèi)者,也就是調(diào)用我們這里的服務(wù)的程序……

3、服務(wù)消費(fèi)者開(kāi)發(fā)

服務(wù)消費(fèi)者的編寫(xiě)還是按照服務(wù)提供者一樣的順序來(lái)

(1)、目錄結(jié)構(gòu)

(2)、maven的pom.xml配置文件獲取需要的架包

[html]view plaincopyprint?

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0?http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

com.test

dubbocli

0.0.1-SNAPSHOT

jar

dubboclient

http://maven.apache.org

UTF-8

3.1.4.RELEASE

1.6.6

junit

junit

3.8.1

test


org.springframework

spring-aop

${spring.version}

org.springframework

spring-asm

${spring.version}

org.springframework

spring-core

${spring.version}

org.springframework

spring-beans

${spring.version}

org.springframework

spring-context

${spring.version}

org.springframework

spring-expression

${spring.version}



log4j

log4j

1.2.16

org.slf4j

slf4j-api

${slf4j.version}

org.slf4j

slf4j-log4j12

${slf4j.version}


com.alibaba

dubbo

2.5.3


com.github.sgroschupf

zkclient

0.1


org.apache.zookeeper

zookeeper

3.4.5

dubbo-demo


org.apache.maven.plugins

maven-compiler-plugin

2.1

1.5

1.5

UTF-8

false


xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

com.test

dubbocli

0.0.1-SNAPSHOT

jar

dubboclient

http://maven.apache.org

UTF-8

3.1.4.RELEASE

1.6.6

junit

junit

3.8.1

test


org.springframework

spring-aop

${spring.version}

org.springframework

spring-asm

${spring.version}

org.springframework

spring-core

${spring.version}

org.springframework

spring-beans

${spring.version}

org.springframework

spring-context

${spring.version}

org.springframework

spring-expression

${spring.version}



log4j

log4j

1.2.16

org.slf4j

slf4j-api

${slf4j.version}

org.slf4j

slf4j-log4j12

${slf4j.version}


com.alibaba

dubbo

2.5.3


com.github.sgroschupf

zkclient

0.1


org.apache.zookeeper

zookeeper

3.4.5

dubbo-demo


org.apache.maven.plugins

maven-compiler-plugin

2.1

1.5

1.5

UTF-8

false


注意:服務(wù)提供者 ,服務(wù)消費(fèi)者以及安裝的zookeeper保持相同的版本號(hào),這樣能省去很多麻煩,而不同版本的錯(cuò)誤在前中有記錄過(guò)可以看看……

(3)、服務(wù)消費(fèi)者的配置applicationConsumer.xml

[html]view plaincopyprint?


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

">









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

">








(4)、消費(fèi)端,也就是調(diào)用服務(wù)端的方法

[java]view plaincopyprint?

packagecom.test.dubbocli;

importorg.springframework.context.support.ClassPathXmlApplicationContext;

importcom.test.dubboser.ServiceDemo;

publicclassMain?{

publicstaticvoidmain(String[]?args)throwsInterruptedException?{

inti=0;

while(i++<5){

run();

Thread.sleep(3000);

}

}

publicstaticvoidrun(){

ClassPathXmlApplicationContext?context?=newClassPathXmlApplicationContext(newString[]?{"applicationConsumer.xml"});

context.start();

ServiceDemo?demoServer?=?(ServiceDemo)?context.getBean("demoServicemy");

String?str=demoServer.say("java?---->>>");

System.err.println("res:?"+str);

}

}

package com.test.dubbocli;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.test.dubboser.ServiceDemo;

public class Main {

public static void main(String[] args) throws InterruptedException {

int i=0;

while(i++<5){

run();

Thread.sleep(3000);

}

}

public static void run(){

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "applicationConsumer.xml" });

context.start();

ServiceDemo demoServer = (ServiceDemo) context.getBean("demoServicemy");

String str=demoServer.say("java ---->>>");

System.err.println("res: "+str);

}

}

注意:這里我們引入了一個(gè)類(lèi) com.test.dubboser.ServiceDemo 類(lèi),這個(gè)類(lèi)是服務(wù)端的接口,所以在啟動(dòng)消費(fèi)端的時(shí)候我們要把服務(wù)端生成jar包導(dǎo)入到消費(fèi)端……

我們看到了消費(fèi)端調(diào)用服務(wù)端的方法就和調(diào)用本地的方法一樣方便,ok 例子就到這里……

4、整個(gè)開(kāi)發(fā)流程:

(1)、安裝zookeeper,修改dataDir

(2)、開(kāi)發(fā)服務(wù)端即服務(wù)提供者,當(dāng)然前提示已經(jīng)有了zookeeper dubbo spring 等jar包,這里使用了maven也就是pom.xml 配置

(3)、將服務(wù)端注冊(cè)到注冊(cè)中心暴露服務(wù)地址配置添加

(4)、使用dubbo協(xié)議將指定的服務(wù)端口暴露配置添加

(5)、聲明需要暴露的服務(wù)接口

(6)、實(shí)現(xiàn)服務(wù)接口

(7)、啟動(dòng)服務(wù)端

這樣 整個(gè)服務(wù)提供者就ok了

(1)、服務(wù)消費(fèi)者開(kāi)發(fā),同樣需要zookeeper dubbo spring 等相關(guān)的jar包,這里使用的是maven所以配置pom.xml

(2)、使用zookeeper廣播注冊(cè)中心發(fā)現(xiàn)暴露的服務(wù)地址的配置添加

(3)、生成 遠(yuǎn)程代理的配置添加

(4)、將服務(wù)端生成jar包引入

(5)、調(diào)用服務(wù)端服務(wù)

5、注意點(diǎn)

(1)、三個(gè)地方提到了zookeeper 、zookeeper的安裝、服務(wù)端注冊(cè)、客戶端注冊(cè) 這三個(gè)地方的zookeeper使用同一版本,這樣能省去一些不必要的錯(cuò)誤?。。?/p>

(2)、記得在服務(wù)消費(fèi)者引入服務(wù)提供者的jar,也就是要把服務(wù)端打成jar包引入到服務(wù)消費(fèi)者?。?!

6、使用dubbo、zookeeper到底做了什么

我們?cè)诰W(wǎng)上能查到dubbo、zookeeper是做什么的,這里不說(shuō)的那么具體還詳細(xì),第一你能看到官網(wǎng)的解釋?zhuān)诙乙矂傞_(kāi)始學(xué)習(xí)不能誤人子弟,下面就是我個(gè)人的簡(jiǎn)單理解:

zookeeper 是注冊(cè)中心,我們寫(xiě)的服務(wù)注冊(cè)到注冊(cè)到zookeeper,zookeeper將服務(wù)端的相關(guān)配置存儲(chǔ)并管理更新,而服務(wù)消費(fèi)者鏈接到zookeeper注冊(cè)中心通過(guò)zookeeper這個(gè)注冊(cè)中心獲取服務(wù)端的相關(guān)信息,生成遠(yuǎn)程代理服務(wù)就調(diào)用服務(wù)端提供的方法了?。?!這是我簡(jiǎn)單的一個(gè)理解,當(dāng)然zookeeper還有軟負(fù)載等功能,但是具體的怎么實(shí)現(xiàn)的也不太清,先知道的自己可以查看資料學(xué)習(xí)?。?!

7、demo源碼下載

(1)、zookeeper 安裝包下載:http://download.csdn.net/detail/qh_java/9655026

zookeeper安裝包下載地址

(2)、服務(wù)端服、服務(wù)消費(fèi)者以及服務(wù)端的jar包(maven工程)下載:http://download.csdn.net/download/qh_java/9655491

dubbo zookeeper小demo下載

ok到此我們簡(jiǎn)單的小demo學(xué)習(xí)就ok了 下片我們看看本地偽集群的配置


愿意了解或者源碼的朋友直接求求交流分享技術(shù):2042849237

更多詳細(xì)源碼參考來(lái)源:http://minglisoft.cn/technology

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容