本dubbo实例是基于zookeeper-3.4.6搭建,下面首先进行zookeeper环境的搭建。
一、zookeeper安装和使用 windows环境
下载
本实例下载的zookeeper版本为3.4.6,下载地址为: http://apache.fayea.com/zookeeper/zookeeper-3.4.6/
安装
解压到指定目录下 D:\Tools2\zookeeper-3.4.6
修改zoo_sample.cfg 文件名(D:\Tools2\zookeeper-3.4.6) 为 zoo.cfg 主要修改一下日志位置,具体配置文件如下:
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
dataDir=D:\\Tools2\\zookeeper-3.4.6\\data
dataLogDir=D:\\Tools2\\zookeeper-3.4.6\\log
# the port at which the clients will connect
clientPort=2181
同时,在D:\Tools2\zookeeper-3.4.6目录下分别新建data和log两个文件夹。 配置文件简单解析:
- tickTime:这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
- dataDir:顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。
- dataLogDir:顾名思义就是 Zookeeper 保存日志文件的目录
- clientPort:这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
ok , 到现在zookeeper的简易环境搭建完毕。
启动
进入到bin目录,并且启动zkServer.cmd,这个脚本中会启动一个java进程。
二、dubbo-admin的部署
首先先看一下dubbo的实现原理图:
节点角色说明:
- Provider: 暴露服务的服务提供方。
- Consumer: 调用远程服务的服务消费方。
- Registry: 服务注册与发现的注册中心。
- Monitor: 统计服务的调用次调和调用时间的监控中心。
- Container: 服务运行容器。
调用关系说明:
- (start)服务容器负责启动,加载,运行服务提供者。
- (register)服务提供者在启动时,向注册中心注册自己提供的服务。
- (subscribe)服务消费者在启动时,向注册中心订阅自己所需的服务。
- (notify)注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
- (invoke) 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
- (count)服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
dubbo-admin的下载,可自行到官网下载,本例子下载的为dubbo-master.zip,并自行打包dubbo-admin。
解压dubbo-master.zip之后进入dubbo-admin的文件夹,并在此文件夹下打开cmd命令窗口,使用mvn进行打包,命令如下:
mvn install -Dmaven.test.skip=true
然而,出现报错:
这是由于com.alibaba:dubbo-admin:war:2.5.4-SNAPSHOT找不到导致报错,为此,我们做版本降级处理,在pom.xml文件中将dubbo的版本修改为2.5.3
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
</dependency>
在运行上述命令,成功打出war包:
打包成功之后,就会发现dubbo-admin下多了个target文件夹,打开target文件夹,发现里面有个war包:
将此war包拷贝到tomcat的webapps文件夹中,启动tomcat后,打开浏览器输入http://localhost:9999/dubbo-admin-2.5.4-SNAPSHOT/,会出现如下弹框:
用户名和密码都输入root进入
到此,dubbo-admin可以正常运行了。
三、消费者和服务使用者的创建
1、服务接口创建
新建一个maven工程
创建一个服务接口
package com.cl.dubbo_Interface;
public interface DemoService {
public void sayHello(String content);
}
运行 clean install打包
2、服务使用者创建
新建一个maven工程
在pom.xml里面引用刚才的服务接口的jar包,同时引入spring等的使用到的相关jar包
<dependency>
<groupId>com.cl</groupId>
<artifactId>dubbo_Interface</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
</dependency>
<!-- 连接zookeeper的客户端 -->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
编写服务实现类
在resource目录下编写配置文件
log4j.properties配置如下:
# Configure logging for testing: optionally with log file
log4j.rootLogger=WARN, stdout
# log4j.rootLogger=WARN, stdout, logfile
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/spring.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
到此,先在src/test/java路径下编写测试类启动dubbo服务
运行测试类,在dubbo控制台看到我们暴露的服务
3、消费者创建
新建一个maven工程
在pom.xml里面引用刚才的服务接口的jar包,同时引入使用到的相关jar包
<dependency>
<groupId>com.cl</groupId>
<artifactId>dubbo_Interface</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
</dependency>
<!-- 连接zookeeper的客户端 -->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
编写consumer的测试类
运行测试类
查看dubbo控制台相关信息