dubbo模块结构图:
1.下载zookeeper-3.4.5.tar.gz,并解压到本地。
我的本地地址为:
D:\zookeeper-3.4.5
2.配置zookeeper:
在zookeeper文件夹下打开conf,创建zoo.cfg,内容如下:
tickTime=200000
initLimit=10
syncLimit=5
dataDir=D:\\zk\\tmp\\zookeeper
dataLogDir=D:\\zk\\logs\\zookeeper
clientPort=8083
1.tickTime:Client-Server通信心跳时间
Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。tickTime以毫秒为单位。
tickTime=2000
2.initLimit:Leader-Follower初始通信时限
集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)。
initLimit=5
3.syncLimit:Leader-Follower同步通信时限
集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数(tickTime的数量)。
syncLimit=2
4.dataDir:数据文件目录
Zookeeper保存数据的目录,默认情况下,Zookeeper将写数据的日志文件也保存在这个目录里。
dataDir=/home/michael/opt/zookeeper/data
5.clientPort:客户端连接端口
客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
clientPort=8083
6.服务器名称与地址:集群信息(服务器编号,服务器地址,LF通信端口,选举端口)
这个配置项的书写格式比较特殊,规则如下:
server.N=YYY:A:B
server.1=itcast05:2888:3888
server.2=itcast06:2888:3888
server.3=itcast07:2888:3888
7.ZK为什么设置为奇数个?
zookeeper有这样一个特性:集群中只要有过半的机器是正常工作的,那么整个集群对外就是可用的。也就是说如果有2个zookeeper,那么只要有1个死了zookeeper就不能用了,因为1没有过半,所以2个zookeeper的死亡容忍度为0;同理,要是有3个zookeeper,一个死了,还剩下2个正常的,过半了,所以3个zookeeper的容忍度为1;同理你多列举几个:2 -> 0; 3 -> 1; 4 - >1; 5 -> 2; 6 -> 2会发现一个规律,2n和2n-1的容忍度是一样的,都是n-1,所以为了更加高效,何必增加那一个不必要的zookeeper呢。
3.启动zookeeper:
在zookeeper文件夹下打开bin目录,双击zkServer.cmd.
如果双击后出现闪退现象,请在zkServer.cmd末尾行加上pause阻止cmd退出,并查看原因。
服务消费方和服务提供方引入dubbo,并防止引用dubbo自己的低版本spring,pom如下:
<!-- dubbo配置开始(并去掉spring低版本依赖开始 ) -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
<exclusion>
<artifactId>netty</artifactId>
<groupId>org.jboss.netty</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
<!-- dubbo配置结束 -->
dubbo服务提供方配置:
在服务方工程的applicationContext.xml所在resource资源下创建dubbo-provider.xml,内容如下:
<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 name="tdemo" />
<!-- 使用zookeeper注册中心暴露服务地址 -->
<dubbo:registry address="zookeeper://127.0.0.1:8083" />
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" />
<!-- 服务提供方 -->
<dubbo:service interface="com.tanlei.service.TestDubboService" ref="testDubboService" />
</beans>
然后在applicationContext.xml中引入dubbo-provider.xml,如下:
<!-- 引入dubbo配置文件 -->
<import resource="dubbo-provider.xml"></import>
dubbo服务消费方配置:
在消费方工程的applicationContext.xml所在resource资源下创建dubbo-consumer.xml,内容如下:
<?xml version="1.0" 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 name="CognosPro"></dubbo:application>
<!-- 使用zookeeper注册中心暴露服务地址 -->
<dubbo:registry address="zookeeper://127.0.0.1:8083" />
<!-- 要引用的服务 -->
<dubbo:reference interface="com.tanlei.service.TestDubboService" id="testDubboService"></dubbo:reference>
</beans>
然后在applicationContext.xml中引入dubbo-consumer.xml,如下:
<!-- 引入dubbo配置文件 -->
<import resource="dubbo-consumer.xml"></import>
我们将接口做为一个jar工程,该jar工程只提供接口和实体类:
pom如下,说明是一个jar工程:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.tanlei</groupId>
<artifactId>testservice</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>testservice</name>
<description>测试</description>
<packaging>jar</packaging>
</project>
然后在服务提供方,我这里是tdemo中引入该jar工程,pom如下:
接口具体实现也在该服务提供方:
服务消费方引入jar工程testservice,pom如下:
服务消费方试用testservice的接口:
访问上面的接口,如果访问成功,说明基本调用成功。