概述
而作为分布式框架之一的Dubbox就能够实现消费方和提供方之间的远程调用,即对分别部署在不同服务器端的服务提供了一个相互交互的平台。
编译及测试步骤:(以下步骤全在windows环境中完成)
1. 本机先安装github on Windows的客户端,将在path路径中,把git.exe加进去
2. 命令行下 git clone https://github.com/dangdangdotcom/dubbox 把代码拉到本地
3. mvn install -Dmaven.test.skip=true 跳过测试编译
4. 在本机安装一个zookeeper,参考zoo.cfg如下:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=D:/java/zookeeper-3.4.6/data
dataLogDir=D:/java/zookeeper-3.4.6/log
clientPort=2181
server.1=localhost:2287:3387
然后输入 bin/zkServer.cmd 启用zookeeper
5. intellij Idea中导入源码
6. 运行 dubboxdubbo-demodubbo-demo-providersrc estjavacomalibabadubbodemoproviderDemoProvider.java
把服务提供方跑起来,成功后,可以在ZK里,用 ls / 看下,会发现zk里多出了一个dubbo的节点,所有服务全注册在这里了
7. 运行dubboxdubbo-demodubbo-demo-consumersrc estjavacomalibabadubbodemoconsumerDemoConsumer.java
服务销售方调用测试,可以看console里的输出
8. 运行dubboxdubbo-demodubbo-demo-consumersrc estjavacomalibabadubbodemoconsumerRestClient.java
跑一下rest调用
9. 浏览器访问 http://localhost:8888/services/users/100.xml 或 http://localhost:8888/services/users/100.json
‘
节点角色说明:
• Provider: 暴露服务的服务提供方。
• Consumer: 调用远程服务的服务消费方。
• Registry: 服务注册与发现的注册中心。
• Monitor: 统计服务的调用次调和调用时间的监控中心。
• Container: 服务运行容器。
调用关系说明:
• 0. 服务容器负责启动,加载,运行服务提供者。
• 1. 服务提供者在启动时,向注册中心注册自己提供的服务。
• 2. 服务消费者在启动时,向注册中心订阅自己所需的服务。
• 3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推
送变更数据给消费者。
• 4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,
如果调用失败,再选另一台调用。
• 5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计
数据到监控中心。
Zookeeper
一:简介
Zookeeper 是 Apacahe Hadoop 的子项目,是一个树型的目录服务,适合作为Dubbox 服务的注册中心,注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小。
二: Zookeeper 在Linux系统的安装(最少三台)
- Linux中安装 jdk
- 把 zookeeper 的压缩包上传到 linux 系统。
- 解压缩压缩包:
tar -zxvf zookeeper-3.4.6.tar.gz
- 进入 zookeeper-3.4.6 目录,创建 data 文件夹。
mkdir data
- 进入conf目录 ,把 zoo_sample.cfg 改名为 zoo.cfg
mv zoo_sample.cfg zoo.cfg
- 打开zoo.cfg , 修改 data 属性:
dataDir=/root/zookeeper-3.4.6/data
三:Zookeeper 服务启动
进入bin目录,启动服务输入命令
./zkServer.sh start
Demo
一:创建服务提供者的Maven工程
1:pom文件
<properties>
<spring.version>4.2.4.RELEASE</spring.version>
</properties>
<dependencies>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- dubbo相关 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.8.4</version>
</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>
<dependency>
<groupId>javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.11.0.GA</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<!-- 指定端口 -->
<port>8081</port>
<!-- 请求路径 -->
<path>/