學(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
(2)、服務(wù)端服、服務(wù)消費(fèi)者以及服務(wù)端的jar包(maven工程)下載:http://download.csdn.net/download/qh_java/9655491
ok到此我們簡(jiǎn)單的小demo學(xué)習(xí)就ok了 下片我們看看本地偽集群的配置
愿意了解或者源碼的朋友直接求求交流分享技術(shù):2042849237
更多詳細(xì)源碼參考來(lái)源:http://minglisoft.cn/technology