本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进程。

zkServer.png

二、dubbo-admin的部署

首先先看一下dubbo的实现原理图: dubbo.png 节点角色说明:

  • Provider: 暴露服务的服务提供方。
  • Consumer: 调用远程服务的服务消费方。
  • Registry: 服务注册与发现的注册中心。
  • Monitor: 统计服务的调用次调和调用时间的监控中心。
  • Container: 服务运行容器。

调用关系说明:

  1. (start)服务容器负责启动,加载,运行服务提供者。
  2. (register)服务提供者在启动时,向注册中心注册自己提供的服务。
  3. (subscribe)服务消费者在启动时,向注册中心订阅自己所需的服务。
  4. (notify)注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
  5. (invoke) 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  6. (count)服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

dubbo-admin的下载,可自行到官网下载,本例子下载的为dubbo-master.zip,并自行打包dubbo-admin。

解压dubbo-master.zip之后进入dubbo-admin的文件夹,并在此文件夹下打开cmd命令窗口,使用mvn进行打包,命令如下:

mvn install -Dmaven.test.skip=true

然而,出现报错:

mvn1.png 这是由于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包:

mvn2.png 打包成功之后,就会发现dubbo-admin下多了个target文件夹,打开target文件夹,发现里面有个war包:

mvn3.png

将此war包拷贝到tomcat的webapps文件夹中,启动tomcat后,打开浏览器输入http://localhost:9999/dubbo-admin-2.5.4-SNAPSHOT/,会出现如下弹框:

dubbo2.png

用户名和密码都输入root进入

dubbo3.png

到此,dubbo-admin可以正常运行了。

三、消费者和服务使用者的创建

1、服务接口创建

新建一个maven工程

mvn_interface.png

创建一个服务接口

package com.cl.dubbo_Interface;

public interface DemoService {
	public void sayHello(String content);
}

运行 clean install打包

mvn4.png

2、服务使用者创建

新建一个maven工程

mvn5.png

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

编写服务实现类

dubbo_p.png

在resource目录下编写配置文件

dubbo_px.png spring-context.png

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_tp.png

运行测试类,在dubbo控制台看到我们暴露的服务

dubbo_pT.png

3、消费者创建

新建一个maven工程

mvn6.png

在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_ct.png

运行测试类

dubbo_cc.png

查看dubbo控制台相关信息

dubbo_cb.png