配色: 字号:
本地Dubbo项目搭建测试例子
2016-10-18 | 阅:  转:  |  分享 
  
一:zookeeper的下载及配置:

一:zookeeper下载:

下载地址:http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.6/

点击zookeeper-3.4.6.tar.gz下载即可!

二:zookeeper配置:

Zookeeper下载后的目录,如图:



1)配置路径:

/conf目录下面的zoo_sample.cfg修改为zoo.cfg



tickTime:Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳。tickTime以毫秒为单位。initLimit:集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)。syncLimit:集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数(tickTime的数量)。

dataDir:Zookeeper保存数据的目录,默认情况下,Zookeeper将写数据的日志文件也保存在这个目录里。

dataLogDir:Zookeeper保存日志文件的目录。clientPort:客户端连接Zookeeper服务器的端口,Zookeeper会监听这个端口,接受客户端的访问请求。

==========================代码如下=====================================

#Thenumberofmillisecondsofeachtick

tickTime=2000

#Thenumberofticksthattheinitial

#synchronizationphasecantake

initLimit=10

#Thenumberofticksthatcanpassbetween

#sendingarequestandgettinganacknowledgement

syncLimit=5

#thedirectorywherethesnapshotisstored.

#donotuse/tmpforstorage,/tmphereisjust

#examplesakes.

dataDir=/data

#theportatwhichtheclientswillconnect

clientPort=2181

#themaximumnumberofclientconnections.

#increasethisifyouneedtohandlemoreclients

#maxClientCnxns=60

#

#Besuretoreadthemaintenancesectionofthe

#administratorguidebeforeturningonautopurge.

#

#http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance

#

#ThenumberofsnapshotstoretainindataDir

#autopurge.snapRetainCount=3

#Purgetaskintervalinhours

#Setto"0"todisableautopurgefeature

#autopurge.purgeInterval=1



即可。

2)路径修改



#Thenumberofmillisecondsofeachtick

tickTime=2000

#Thenumberofticksthattheinitial

#synchronizationphasecantake

initLimit=10

#Thenumberofticksthatcanpassbetween

#sendingarequestandgettinganacknowledgement

syncLimit=5

#thedirectorywherethesnapshotisstored.

#donotuse/tmpforstorage,/tmphereisjust

#examplesakes.

dataDir=C:/Users/issuser/Desktop/service1/data

dataLogDir=C:/Users/issuser/Desktop/service1/log

#theportatwhichtheclientswillconnect

clientPort=2183

#themaximumnumberofclientconnections.

#increasethisifyouneedtohandlemoreclients

#maxClientCnxns=60

#

#Besuretoreadthemaintenancesectionofthe

#administratorguidebeforeturningonautopurge.

#

#http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance

#

#ThenumberofsnapshotstoretainindataDir

#autopurge.snapRetainCount=3

#Purgetaskintervalinhours

#Setto"0"todisableautopurgefeature

#autopurge.purgeInterval=1

二:创建项目

一:做服务端:

1)创建一个web项目:DubboZookeeper作为服务端。



2)定义一个实体类:User

publicclassUser{

@Override

publicStringtoString(){

return"User[name="+name+",age="+age+",sex="+sex+"]";

}

privateStringname;

privateintage;

privateStringsex;



publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

this.name=name;

}

publicintgetAge(){

returnage;

}

publicvoidsetAge(intage){

this.age=age;

}

publicStringgetSex(){

returnsex;

}

publicvoidsetSex(Stringsex){

this.sex=sex;

}

}

3)定义一个service接口:DemoService



publicinterfaceDemoService{

StringsayHello(Stringname);

publicListgetUsers();

}

4)定义一个service接口的实现类,DemoServiceImpl

publicclassDemoServiceImplimplementsDemoService{

@Override

publicStringsayHello(Stringname){

return"Hello"+name;

}



@Override

publicListgetUsers(){

Listlist=newArrayList();

Useru1=newUser();

u1.setName("jack");

u1.setAge(20);

u1.setSex("男");



Useru2=newUser();

u2.setName("tom");

u2.setAge(21);

u2.setSex("女");



Useru3=newUser();

u3.setName("rose");

u3.setAge(19);

u3.setSex("女");



list.add(u1);

list.add(u2);

list.add(u3);

returnlist;

}

}

5)创建一个dao的测试类Provider:(使用JUnit测试)

publicclassProvider{

@Before

publicvoidsetUp()throwsException{

}



@Test

publicvoidtestMain()throwsIOException{

ClassPathXmlApplicationContextcontext=newClassPathXmlApplicationContext(newString[]{"applicationContext.xml"});

context.start();



System.in.read();//按任意键退出

}

}

6)创建XML配置文件:applicationContext.xml(注意:此处的路径必须是项目的路径,能ctrl+鼠标点进去)




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服务配置























7)引用的jar包:



二:做客户端:

1)创建新项目:DubboTest



2)创建测试类Consumer:(用JUnit测试)

publicclassConsumer{

@Before

publicvoidsetUp()throwsException{

}

@Test

publicvoidtestMain()throwsIOException{

ClassPathXmlApplicationContextcontext=newClassPathXmlApplicationContext(newString[]{"applicationContext.xml"});

context.start();

DemoServicedemoService=(DemoService)context.getBean("demoService");

Stringhello=demoService.sayHello("tom");

System.out.println(Thread.currentThread().getName()+hello);

System.in.read();

}

}

3)创建客户端的xml测试访问dubbo:applicationContext.xml




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)注意

此处的要与服务端的路径要一致!

5)与服务端的一样,要使用jar包:



Zookeeper正常启动的样子



会显示端口号,此处端口号为2181

不启动zookeeper后台报错信息:



正常连接后,后台信息:



Zookeeper的信息:



强制关闭服务后的zookeeper信息



Zookeeper集群

只要集群上大多数的Zookeeper服务启动了,推荐集群中部署奇数个节点,由于zookeeper挂掉一半的机器集群就不可用,所以部署4台和3台的集群都是在挂掉2台后集群不可用

集群需要修改的东西:

为了好区分我将zookeeper-3.4.6改名为server1(结构图如下)



新建两个文件夹:data与log

data文件夹存放数据

log文件夹存放日志

在data文件夹下,新建myid文件(注意:无后缀名)

myid文件里写的数字要与zoo.cfg中配置的数字一直。下面有详细图解:



此处的myid我写的是数字1



配置zoo.cfg文件

如单个zookeeper服务一样,需要配置zoo.cfg文件!文件在conf文件夹下



到此,一个zookeeper的集群配置完成了,想测试集群就复制多份!此处我复制了三份!

为了好区分,我给改了三个名字!其余的两份,需要修改的是zoo.cfg中的路径!



多个zookeeper需要修改的地方

zoo.cfg文件:





myid文件:





项目中的配置多个zookeeper路径

dubbo.properties中配置:





dubbo.registry.address=zookeeper://192.168.108.161:2181?backup=192.168.108.162:2181,192.168.108.163:2181



或者spring-dubbo.xml中配置:





Zookeeper集群启动截图:依次启动

启动server1服务





启动server2服务





启动server3服务





服务server3启动后server1服务显示:



服务server3启动后server2服务显示:





启动服务端项目

zookeeper启动后:



启动服务项目后,zookeeper状态:



服务项目启动后,控制台打印:



启动客户端项目

启动服务端后,zookeeper的状态:



启动客户端后,zookeeper的状态:



启动客户端项目后,控制台打印:



将zookeeper的一个服务停掉

将端口号为2182的zookeeper服务关掉:



客户端项目后台显示:



服务端项目后台显示:



将zookeeper的第二个服务停掉

第三个服务信息打印:





服务端项目,后台信息显示:



客户端项目,后台信息显示:



结论

zookeeper服务总数2n个,关掉n-1个服务,项目是可以正常运行的!但挂掉一半以上,项目是启动不起来的!

Linux查看状态命令



Duboo注解

接口类项目:DubboServiceInterface



仅仅是一个接口类项目!接口是普通接口!



注意:将接口类项目打包成jar分别放入服务端项目跟客户端项目!

服务端项目:DubboServiceProvider



实现类fooserviceImpl.java



packagecom.alibaba.dubbo.demo.imp;



importcom.alibaba.dubbo.config.annotation.Service;

importcom.alibaba.dubbo.demo.DemoService;

@Service(version="1.0")

publicclassFooServiceImplimplementsDemoService{

@Override

publicStringsayHello(Stringname){

return"Hello"+name;

}

}

web.xml配置扫描内容







DubboServiceProvider



spring org.springframework.web.servlet.DispatcherServlet

1





spring





org.springframework.web.context.ContextLoaderListener





contextConfigLocation classpath:applicationContext.xml





applicationContext.xml配置






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































测试类Provider



packagecom.alibaba.dubbo.test;



importjava.io.IOException;

importorg.junit.Before;

importorg.junit.Test;

importorg.springframework.context.support.ClassPathXmlApplicationContext;

publicclassProvider{

@Before

publicvoidsetUp()throwsException{

}

@Test

publicvoidtestMain()throwsIOException{

ClassPathXmlApplicationContextcontext=newClassPathXmlApplicationContext(

newString[]{"applicationContext.xml"});

context.start();

System.in.read();//按任意键退出

}

}

lib下的jar包



客户端项目:DubboServiceConsumer



web.xml配置扫描内容



applicationContext.xml文件






xmlns:context="http://www.springframework.org/schema/context"

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



















测试类:Consumer



packagecom.unj.dubbotest.action;

importjava.io.IOException;

importorg.junit.Test;

importorg.springframework.context.support.ClassPathXmlApplicationContext;

importcom.alibaba.dubbo.config.annotation.Reference;

importcom.alibaba.dubbo.demo.DemoService;

publicclassConsumer{

@Reference(version="1.0")

privateDemoServicedemoService;



@Test

publicvoidmainTest()throwsIOException{

ClassPathXmlApplicationContextcontext=newClassPathXmlApplicationContext(

newString[]{"applicationContext.xml"});

context.start();

demoService=(DemoService)context.getBean("demoService"); //获取远程服务代理

Stringhello=demoService.sayHello("world"); //执行远程方法

System.out.println(hello); //显示调用结果

}

}

lib下的jar包

























献花(0)
+1
(本文系樱梦雪苹宝首藏)