Dubbo+Zookeeper+Spring整合应用篇-Dubbo基于Zookeeper实现分布式服务
2016-02-24 11:24
651 查看
Dubbo与Zookeeper、Spring整合使用
Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。
双击zkServer.cmd启动注册中心服务。
zkServer.sh【Linux】或zkServer.cmd【Windows】
2,在你执行启动脚本之前,还有几个基本的配置项需要配置一下,Zookeeper的配置文件在 conf 目录下,这个目录下有 zoo_sample.cfg 和 log4j.properties,你需要做的就是将zoo_sample.cfg
改名为 zoo.cfg,因为 Zookeeper在启动时会找这个文件作为默认配置文件。下面详细介绍一下,这个配置文件中各个配置项的意义。
•tickTime:这个时间是作为Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
•dataDir:顾名思义就是 Zookeeper保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。
•dataLogDir:顾名思义就是Zookeeper 保存日志文件的目录
•clientPort:这个端口就是客户端连接Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求
配置好后,zookeeper会监听本机的2181端口。
当这些配置项配置好后,你现在就可以启动 Zookeeper 了,启动后要检查 Zookeeper 是否已经在服务,可以通过 netstat – ano 命令查看是否有你配置的 clientPort
端口号在监听服务。
[java]view
plaincopyprint?
package com.unj.dubbotest.provider;
import java.util.List;
publicinterface DemoService {
String sayHello(String name);
public List getUsers();
}
在服务提供方实现接口:(对服务消费方隐藏实现)
[java]view
plaincopy
print?
package com.unj.dubbotest.provider.impl;
import java.util.ArrayList;
import java.util.List;
import com.unj.dubbotest.provider.DemoService;
publicclass DemoServiceImpl implements DemoService {
public String sayHello(String name) {
return"Hello " + name;
}
public List getUsers() {
List list = new ArrayList();
User u1 = new User();
u1.setName("hejingyuan");
u1.setAge(20);
u1.setSex("f");
User u2 = new User();
u2.setName("xvshu");
u2.setAge(21);
u2.setSex("m");
list.add(u1);
list.add(u2);
return list;
}
}
用Spring配置声明暴露服务:
[html]view
plaincopyprint?
xmlversion="1.0"encoding="UTF-8"?>
<< span>beansxmlns="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
">
<< span>beanid="demoService"class="com.unj.dubbotest.provider.impl.DemoServiceImpl"/>
<< span>dubbo:applicationname="xs_provider"/>
<< span>dubbo:registryaddress="zookeeper://192.168.24.213:2181"/>
<< span>dubbo:protocolname="dubbo"port="20880"/>
<< span>dubbo:serviceinterface="com.unj.dubbotest.provider.DemoService"
ref="demoService"/>
</>beans>
加载Spring配置,启动服务(或者将项目建为web项目,然后在web.xml中配置好spring的启动,然后扔到tomcat中即可提供服务):
[java]view
plaincopy
print?
package com.unj.dubbotest.provider.impl;
import org.springframework.context.support.ClassPathXmlApplicationContext;
publicclass Provider {
publicstaticvoid main(String[] args) throws Exception {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
new String[] { "applicationContext.xml" });
context.start();
System.in.read(); // 为保证服务一直开着,利用输入流的阻塞来模拟
}
}
[html]view
plaincopyprint?
xmlversion="1.0"encoding="UTF-8"?>
<< span>beansxmlns="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
">
<< span>dubbo:applicationname="hjy_consumer"/>
<< span>dubbo:referenceid="demoService"
interface="com.unj.dubbotest.provider.DemoService"/>
</>beans>
调用服务测试:
[java]view
plaincopy
print?
package com.alibaba.dubbo.demo.pp;
import java.util.List;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.unj.dubbotest.provider.DemoService;
publicclass Consumer {
publicstaticvoid main(String[] args) throws Exception {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
new String[] { "applicationContext.xml" });
context.start();
DemoService demoService = (DemoService) context.getBean("demoService");
String hello = demoService.sayHello("hejingyuan");
System.out.println(hello);
List list = demoService.getUsers();
if (list != null && list.size() > 0) {
for (int i = 0; i <
listsizeispan>
System.out.println(list.get(i));
}
}
System.in.read();
}
}
测试结果:
附:Dubbo的管理页面
需要下载:dubbo-admin-2.5.3的war包
下载地址:http://download.csdn.net/detail/u013286716/7041185
操作如下:
1,替换掉tomcat/webapps下自带的ROOT文件夹内容(即替换tomcat的启动主页),将下载的war包解压到webapps/ROOT中,直接替换即可
注意:jdk不要使用1.8,本次实验使用的为1.6
2,启动tomcat,访问ip:8080即可或者如果是本地的话使用localhost:8080
输入用户名密码,在E:\apache-tomcat-7.0.6-dubbo\webapps\ROOT\WEB-INF下的dubbo.properties文件中即可查看到,如:
3,访问http://192.168.24.213:38080/
4,启动我们的服务提供者和消费者即可查看到
整体说明:
Zookeeper(注册中心)部署到213的机子上,服务提供者和服务消费者均在215的机子上运行,当然我们也可以分别将服务提供者和服务消费者部署到不同的两台机子上。
优点:
服务提供者和服务消费者只需要知道注册中心即可,它们之间打交道需通过注册中心这个第三方,只要是注册中心中已经注册的服务,我们均可以使用,实现了服务提供者和服务消费者间的解耦。
Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。
一:单机模式安装zookeeper
1,下载zookeeper注册中心,下载地址:http://www.apache.org/dyn/closer.cgi/zookeeper/ 下载后解压即可,进入E:\zookeeper-3.3.6\zookeeper-3.3.6\bin,双击zkServer.cmd启动注册中心服务。
zkServer.sh【Linux】或zkServer.cmd【Windows】
2,在你执行启动脚本之前,还有几个基本的配置项需要配置一下,Zookeeper的配置文件在 conf 目录下,这个目录下有 zoo_sample.cfg 和 log4j.properties,你需要做的就是将zoo_sample.cfg
改名为 zoo.cfg,因为 Zookeeper在启动时会找这个文件作为默认配置文件。下面详细介绍一下,这个配置文件中各个配置项的意义。
•tickTime:这个时间是作为Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
•dataDir:顾名思义就是 Zookeeper保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。
•dataLogDir:顾名思义就是Zookeeper 保存日志文件的目录
•clientPort:这个端口就是客户端连接Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求
配置好后,zookeeper会监听本机的2181端口。
当这些配置项配置好后,你现在就可以启动 Zookeeper 了,启动后要检查 Zookeeper 是否已经在服务,可以通过 netstat – ano 命令查看是否有你配置的 clientPort
端口号在监听服务。
二:服务提供者
定义服务接口:(该接口需单独打包,在服务提供方和消费方共享)[java]view
plaincopyprint?
package com.unj.dubbotest.provider;
import java.util.List;
publicinterface DemoService {
String sayHello(String name);
public List getUsers();
}
在服务提供方实现接口:(对服务消费方隐藏实现)
[java]view
plaincopy
print?
package com.unj.dubbotest.provider.impl;
import java.util.ArrayList;
import java.util.List;
import com.unj.dubbotest.provider.DemoService;
publicclass DemoServiceImpl implements DemoService {
public String sayHello(String name) {
return"Hello " + name;
}
public List getUsers() {
List list = new ArrayList();
User u1 = new User();
u1.setName("hejingyuan");
u1.setAge(20);
u1.setSex("f");
User u2 = new User();
u2.setName("xvshu");
u2.setAge(21);
u2.setSex("m");
list.add(u1);
list.add(u2);
return list;
}
}
用Spring配置声明暴露服务:
[html]view
plaincopyprint?
xmlversion="1.0"encoding="UTF-8"?>
<< span>beansxmlns="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
">
<< span>beanid="demoService"class="com.unj.dubbotest.provider.impl.DemoServiceImpl"/>
<< span>dubbo:applicationname="xs_provider"/>
<< span>dubbo:registryaddress="zookeeper://192.168.24.213:2181"/>
<< span>dubbo:protocolname="dubbo"port="20880"/>
<< span>dubbo:serviceinterface="com.unj.dubbotest.provider.DemoService"
ref="demoService"/>
</>beans>
加载Spring配置,启动服务(或者将项目建为web项目,然后在web.xml中配置好spring的启动,然后扔到tomcat中即可提供服务):
[java]view
plaincopy
print?
package com.unj.dubbotest.provider.impl;
import org.springframework.context.support.ClassPathXmlApplicationContext;
publicclass Provider {
publicstaticvoid main(String[] args) throws Exception {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
new String[] { "applicationContext.xml" });
context.start();
System.in.read(); // 为保证服务一直开着,利用输入流的阻塞来模拟
}
}
三:服务消费者
通过Spring配置引用远程服务:[html]view
plaincopyprint?
xmlversion="1.0"encoding="UTF-8"?>
<< span>beansxmlns="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
">
<< span>dubbo:applicationname="hjy_consumer"/>
<< span>dubbo:referenceid="demoService"
interface="com.unj.dubbotest.provider.DemoService"/>
</>beans>
调用服务测试:
[java]view
plaincopy
print?
package com.alibaba.dubbo.demo.pp;
import java.util.List;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.unj.dubbotest.provider.DemoService;
publicclass Consumer {
publicstaticvoid main(String[] args) throws Exception {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
new String[] { "applicationContext.xml" });
context.start();
DemoService demoService = (DemoService) context.getBean("demoService");
String hello = demoService.sayHello("hejingyuan");
System.out.println(hello);
List list = demoService.getUsers();
if (list != null && list.size() > 0) {
for (int i = 0; i <
listsizeispan>
System.out.println(list.get(i));
}
}
System.in.read();
}
}
测试结果:
附:Dubbo的管理页面
需要下载:dubbo-admin-2.5.3的war包
下载地址:http://download.csdn.net/detail/u013286716/7041185
操作如下:
1,替换掉tomcat/webapps下自带的ROOT文件夹内容(即替换tomcat的启动主页),将下载的war包解压到webapps/ROOT中,直接替换即可
注意:jdk不要使用1.8,本次实验使用的为1.6
2,启动tomcat,访问ip:8080即可或者如果是本地的话使用localhost:8080
输入用户名密码,在E:\apache-tomcat-7.0.6-dubbo\webapps\ROOT\WEB-INF下的dubbo.properties文件中即可查看到,如:
3,访问http://192.168.24.213:38080/
4,启动我们的服务提供者和消费者即可查看到
整体说明:
Zookeeper(注册中心)部署到213的机子上,服务提供者和服务消费者均在215的机子上运行,当然我们也可以分别将服务提供者和服务消费者部署到不同的两台机子上。
优点:
服务提供者和服务消费者只需要知道注册中心即可,它们之间打交道需通过注册中心这个第三方,只要是注册中心中已经注册的服务,我们均可以使用,实现了服务提供者和服务消费者间的解耦。
相关文章推荐
- java 可变参数
- Eclipse+Webservice简单开发实例
- 【Java】各种软件安装与环境配置的失败
- Android Studio 与 Eclipse 快捷键对照及AS常用快捷键
- Java实现几种常见排序方法
- Java集合的小抄 Java初学者必备
- SpringSecurity菜单权限管理
- java_String学习笔记
- 个人学习-java-static关键字
- 将Maven项目转成eclipse .project项目时可能出现的错误
- Eclipse中Egit冲突解决
- Spring MVC中Session的正确用法之我见
- Maven项目转换成Eclipse项目
- JAVA简易WEB服务器(三)
- 《Java编程思想》--集合类
- 总结一下整合Struts2+Hibernate3+Spring4开发Java Web应用过程
- JAVA进阶:VO(DTO)与PO(DAO)之间的转换
- PlayFrameWork2eclipse命令无法执行的原因
- Java中的特殊字符的转义问题
- Java学习记录:降低耦合度