zookeeper+Dubbo环境搭建及简单Demo
一、运行环境
本文运行环境:windows 7 + JDK1.8 + zookeeper-3.3.6 + dubbo-admin-2.5.4 (支持JDK 1.8)+ dubbo 2.5.3
所需工具可至资源页下载 –》点我下载
本文采用Dubbo与Zookeeper、Spring框架的整合。
主要是以下几个步骤:
1. 安装Zookeeper,启动;
2. 创建MAVEN项目,构建Dubbo+Zookeeper+Spring实现的简单Demo;
3. 安装Dubbo-admin,实现监控。
二、安装配置Zookeeper
1、tickTime:这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
2、dataDir:是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。
3、dataLogDir:是 Zookeeper 保存日志文件的目录
4、clientPort:这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
在(D:\zookeeper-3.4.8\)目录下创建/tmp/zookeeper文件夹
启动
进入到bin文件夹下,在上面地址栏中输入cmd进入命令行,输入zkServer.cmd,若如图显示则代表启动成功。
三、创建MAVEN项目
(编译环境使用Intellij JDK版本为1.8)
项目结构:
dubbo-api : 存放公共接口;
dubbo-consumer : 调用远程服务;
dubbo-provider : 提供远程服务。
具体如图所示:
1、新建MAVEN项目 DubboDemo
导入所需要的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/maven-v4_0_0.xsd”>
-
<modelVersion>4.0.0</modelVersion>
-
<groupId>DubboDemo</groupId>
-
<artifactId>DubboDemo</artifactId>
-
<packaging>pom</packaging>
-
<version>1.0-SNAPSHOT</version>
-
<modules>
-
<module>dubbo-api</module>
-
<module>dubbo-consumer</module>
-
<module>dubbo-provider</module>
-
</modules>
-
-
<name>DubboDemo Maven Webapp</name>
-
<url>http://maven.apache.org</url>
-
<properties>
-
<maven.compiler.source>1.8</maven.compiler.source>
-
<maven.compiler.target>1.8</maven.compiler.target>
-
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
-
-
<!– spring版本号 –>
-
<spring.version>4.2.5.RELEASE</spring.version>
-
-
<!– mybatis版本号 –>
-
<mybatis.version>3.2.8</mybatis.version>
-
-
<!– mysql驱动版本号 –>
-
<mysql-driver.version>5.1.29</mysql-driver.version>
-
-
<!– log4j日志包版本号 –>
-
<slf4j.version>1.7.18</slf4j.version>
-
<log4j.version>1.2.17</log4j.version>
-
-
</properties>
-
<dependencies>
-
<dependency>
-
<groupId>junit</groupId>
-
<artifactId>junit</artifactId>
-
<version>3.8.1</version>
-
<scope>test</scope>
-
</dependency>
-
<!– 添加jstl依赖 –>
-
<dependency>
-
<groupId>jstl</groupId>
-
<artifactId>jstl</artifactId>
-
<version>1.2</version>
-
</dependency>
-
-
<dependency>
-
<groupId>javax</groupId>
-
<artifactId>javaee-api</artifactId>
-
<version>7.0</version>
-
</dependency>
-
-
<!– 添加junit4依赖 –>
-
<dependency>
-
<groupId>junit</groupId>
-
<artifactId>junit</artifactId>
-
<version>4.11</version>
-
<!– 指定范围,在测试时才会加载 –>
-
<scope>test</scope>
-
</dependency>
-
-
<!– 添加spring核心依赖 –>
-
<dependency>
-
<groupId>org.springframework</groupId>
-
<artifactId>spring-core</artifactId>
-
<version>${spring.version}</version>
-
</dependency>
-
<dependency>
-
<groupId>org.springframework</groupId>
-
<artifactId>spring-web</artifactId>
-
<version>${spring.version}</version>
-
</dependency>
-
<dependency>
-
<groupId>org.springframework</groupId>
-
<artifactId>spring-oxm</artifactId>
-
<version>${spring.version}</version>
-
</dependency>
-
<dependency>
-
<groupId>org.springframework</groupId>
-
<artifactId>spring-tx</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-webmvc</artifactId>
-
<version>${spring.version}</version>
-
</dependency>
-
<dependency>
-
<groupId>org.springframework</groupId>
-
<artifactId>spring-context</artifactId>
-
<version>${spring.version}</version>
-
</dependency>
-
<dependency>
-
<groupId>org.springframework</groupId>
-
<artifactId>spring-context-support</artifactId>
-
<version>${spring.version}</version>
-
</dependency>
-
<dependency>
-
<groupId>org.springframework</groupId>
-
<artifactId>spring-aop</artifactId>
-
<version>${spring.version}</version>
-
</dependency>
-
-
<dependency>
-
<groupId>org.springframework</groupId>
-
<artifactId>spring-test</artifactId>
-
<version>${spring.version}</version>
-
</dependency>
-
-
<!– 添加mybatis依赖 –>
-
<dependency>
-
<groupId>org.mybatis</groupId>
-
<artifactId>mybatis</artifactId>
-
<version>${mybatis.version}</version>
-
</dependency>
-
-
<!– 添加mybatis/spring整合包依赖 –>
-
<dependency>
-
<groupId>org.mybatis</groupId>
-
<artifactId>mybatis-spring</artifactId>
-
<version>1.2.2</version>
-
</dependency>
-
-
<!– 添加mysql驱动依赖 –>
-
<dependency>
-
<groupId>mysql</groupId>
-
<artifactId>mysql-connector-java</artifactId>
-
<version>${mysql-driver.version}</version>
-
</dependency>
-
<!– 添加数据库连接池依赖 –>
-
<dependency>
-
<groupId>commons-dbcp</groupId>
-
<artifactId>commons-dbcp</artifactId>
-
<version>1.2.2</version>
-
</dependency>
-
-
<!– 添加fastjson –>
-
<dependency>
-
<groupId>com.alibaba</groupId>
-
<artifactId>fastjson</artifactId>
-
<version>1.2.22</version>
-
</dependency>
-
-
<!– 添加日志相关jar包 –>
-
<dependency>
-
<groupId>log4j</groupId>
-
<artifactId>log4j</artifactId>
-
<version>${log4j.version}</version>
-
</dependency>
-
<dependency>
-
<groupId>org.slf4j</groupId>
-
<artifactId>slf4j-api</artifactId>
-
<version>${slf4j.version}</version>
-
</dependency>
-
<dependency>
-
<groupId>org.slf4j</groupId>
-
<artifactId>slf4j-log4j12</artifactId>
-
<version>${slf4j.version}</version>
-
</dependency>
-
-
<!– log end –>
-
<!– 映入JSON –>
-
<dependency>
-
<groupId>org.codehaus.jackson</groupId>
-
<artifactId>jackson-mapper-asl</artifactId>
-
<version>1.9.13</version>
-
</dependency>
-
<!– https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core –>
-
<dependency>
-
<groupId>com.fasterxml.jackson.core</groupId>
-
<artifactId>jackson-core</artifactId>
-
<version>2.8.0</version>
-
</dependency>
-
<!– https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind –>
-
<dependency>
-
<groupId>com.fasterxml.jackson.core</groupId>
-
<artifactId>jackson-databind</artifactId>
-
<version>2.8.0</version>
-
</dependency>
-
-
<dependency>
-
<groupId>commons-fileupload</groupId>
-
<artifactId>commons-fileupload</artifactId>
-
<version>1.3.1</version>
-
</dependency>
-
-
<dependency>
-
<groupId>commons-io</groupId>
-
<artifactId>commons-io</artifactId>
-
<version>2.4</version>
-
</dependency>
-
-
<dependency>
-
<groupId>commons-codec</groupId>
-
<artifactId>commons-codec</artifactId>
-
<version>1.9</version>
-
</dependency>
-
-
<dependency>
-
<groupId>org.quartz-scheduler</groupId>
-
<artifactId>quartz</artifactId>
-
<version>2.2.1</version>
-
</dependency>
-
-
<dependency>
-
<groupId>org.apache.shiro</groupId>
-
<artifactId>shiro-core</artifactId>
-
<version>1.3.2</version>
-
</dependency>
-
<dependency>
-
<groupId>org.apache.shiro</groupId>
-
<artifactId>shiro-web</artifactId>
-
<version>1.3.2</version>
-
</dependency>
-
<dependency>
-
<groupId>org.apache.shiro</groupId>
-
<artifactId>shiro-spring</artifactId>
-
<version>1.3.2</version>
-
</dependency>
-
<dependency>
-
<groupId>org.apache.shiro</groupId>
-
<artifactId>shiro-ehcache</artifactId>
-
<version>1.3.2</version>
-
</dependency>
-
<dependency>
-
<groupId>org.apache.zookeeper</groupId>
-
<artifactId>zookeeper</artifactId>
-
<version>3.4.9</version>
-
</dependency>
-
<!– dubbo –>
-
<dependency>
-
<groupId>com.alibaba</groupId>
-
<artifactId>dubbo</artifactId>
-
<version>2.5.3</version>
-
<exclusions>
-
<exclusion>
-
<groupId>org.springframework</groupId>
-
<artifactId>spring</artifactId>
-
</exclusion>
-
</exclusions>
-
</dependency>
-
<dependency>
-
<groupId>com.101tec</groupId>
-
<artifactId>zkclient</artifactId>
-
<version>0.10</version>
-
</dependency>
-
<dependency>
-
<groupId>DubboDemo</groupId>
-
<artifactId>dubbo-api</artifactId>
-
<version>1.0-SNAPSHOT</version>
-
</dependency>
-
-
</dependencies>
-
<build>
-
<finalName>DubboDemo</finalName>
-
</build>
-
</project>
2、在此项目下新建MAVEN项目:dubbo-api
创建接口DemoService
-
package com.zh.dubbo.demo;
-
-
import java.util.List;
-
-
public interface DemoService {
-
List<String> getPermissions(Long id);
-
}
(若不能创建java文件,则在java文件夹点击右键,选择Mark Directory As —–Source Root即可)
3、创建dubbo-provider的MAVEN项目实现公共接口
-
package com.zh.dubbo.demo.impl;
-
-
import com.zh.dubbo.demo.DemoService;
-
-
import java.util.ArrayList;
-
import java.util.List;
-
-
public class DemoServiceImpl implements DemoService {
-
public List<String> getPermissions(Long id) {
-
List<String> demo = new ArrayList<String>();
-
demo.add(String.format(“Permission_%d”, id – 1));
-
demo.add(String.format(“Permission_%d”, id));
-
demo.add(String.format(“Permission_%d”, id + 1));
-
return demo;
-
}
-
}
添加Spring配置声明文件 Provider.xml 此文件放在target/classes文件夹下
-
“1.0” encoding=“UTF-8” xml version=
-
<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-admin 或 dubbo-monitor 会显示这个名字,方便辨识–>
-
<dubbo:application name=“demotest-provider” owner=“programmer” organization=“dubbox”/>
-
<!–使用 zookeeper 注册中心暴露服务,注意要先开启 zookeeper–>
-
<dubbo:registry address=“zookeeper://localhost:2181”/>
-
<!– 用dubbo协议在20880端口暴露服务 –>
-
<dubbo:protocol name=“dubbo” port=“20880” />
-
<!–使用 dubbo 协议实现定义好的 api.PermissionService 接口–>
-
<dubbo:service interface=“com.zh.dubbo.demo.DemoService” ref=“demoService” protocol=“dubbo” />
-
<!–具体实现该接口的 bean–>
-
<bean id=“demoService” class=“com.zh.dubbo.demo.impl.DemoServiceImpl”/>
-
</beans>
添加启动远程服务类Provider.class:
-
package com.zh.dubbo.demo.impl;
-
-
import org.springframework.context.support.ClassPathXmlApplicationContext;
-
import java.io.IOException;
-
-
public class Provider {
-
public static void main(String[] args) throws IOException {
-
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(“provider.xml”);
-
System.out.println(context.getDisplayName() + “: here”);
-
context.start();
-
System.out.println(“服务已经启动…”);
-
System.in.read();
-
}
-
}
4、创建dubbo-consumer的MAVEN项目添加Spring配置声明文件 consumer.xml 此文件放在target/classes文件夹下
-
“1.0” encoding=“UTF-8” xml version=
-
<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=“demotest-consumer” owner=“programmer” organization=“dubbox”/>
-
<!–向 zookeeper 订阅 provider 的地址,由 zookeeper 定时推送–>
-
<dubbo:registry address=“zookeeper://localhost:2181”/>
-
<!–使用 dubbo 协议调用定义好的 api.PermissionService 接口–>
-
<dubbo:reference id=“permissionService” interface=“com.zh.dubbo.demo.DemoService”/>
-
</beans>
创建Consumer类, 启动Consumer,调用远程服务
-
package com.zh.dubbo.consumer;
-
-
import com.zh.dubbo.demo.DemoService;
-
import org.springframework.context.support.ClassPathXmlApplicationContext;
-
-
public class Consumer {
-
public static void main(String[] args) {
-
//测试常规服务
-
ClassPathXmlApplicationContext context =
-
new ClassPathXmlApplicationContext(“consumer.xml”);
-
context.start();
-
System.out.println(“consumer start”);
-
DemoService demoService = context.getBean(DemoService.class);
-
System.out.println(“consumer”);
-
System.out.println(demoService.getPermissions(1L));
-
}
-
}
5、运行项目,先确保provider已被运行后再启动consumer模块
四、Dubbo管理控制台配置
1、把dubbo-admin.war放到tomcat的webapps目录下
2、启动tomcat
3、在webapps文件夹下找到dubbo-admin文件夹,进入WEB-INF文件夹,打开dubbo.properties,可以看到账户密码分别为root guest
4、在启动zookeeper后,然后再启动tomcat,访问地址:http://localhost:8080/dubbo-admin/
输入帐号密码后即可登录到后台
–结束–
转载请注明:SuperIT » zookeeper+Dubbo环境搭建及简单Demo