一: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包
|
|