`
starbhhc
  • 浏览: 655231 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

Dubbo+Zookeeper+Spring整合应用篇-Dubbo基于Zookeeper实现分布式服务(二)

 
阅读更多

Dubbo与Zookeeper、Spring整合使用

Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。

一:单机模式安装zookeeper

1,下载zookeeper注册中心,下载地址:http://www.apache.org/dyn/closer.cgi/zookeeper/ (zookeeper 3.4.5 安装包 windows、linux下安装是一样的)下载后解压即可,进入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在启动时会找这个文件作为默认配置文件。dataDir修改为D:/deployment/zookeeper-3.4.5/data。下面详细介绍一下,这个配置文件中各个配置项的意义。

 

 

 

initLimit:这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 5个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 5*2000=10 秒

syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个    

•tickTime:这个时间是作为Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。

   •dataDir:顾名思义就是 Zookeeper保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。

   •dataLogDir:顾名思义就是Zookeeper 保存日志文件的目录

   •clientPort:这个端口就是客户端连接Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求

 

 

可选配置: 

1.在zoo.conf中添加

server.1=192.168.1.113:2888:3888

server.2=192.168.1.111:2888:3888

 

2.解释:

server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。

3.

D:/deployment/zookeeper-3.4.5/data下创myid文件 myid的文件内容分别为:1、2 上边下边配置文件中192.168.1.113servier.X中的X值,如ip113的电脑,myid为1)

4.分别启动两个zookeeper,在一台机器上创建节点,另一个机器能同步过去证明成功

5.zookeeper服务器推荐用奇数个,半数以上服务正常,整个服务就正常,本人条件有限只配置两个

 

配置好后,zookeeper会监听本机的2181端口。

当这些配置项配置好后,你现在就可以启动 Zookeeper 了,启动后要检查 Zookeeper 是否已经在服务,可以通过 netstat – ano 命令查看是否有你配置的 clientPort 端口号在监听服务。

 

 dos命令为:netstat -ano|findstr "2181"  ,输入后,回车就好。如果dos打印出了带有2181端口的字串,就说明成功了。

 

 

 

附:Dubbo的管理页面

dubbo-admin-2.5.3下载地址<自带jetty>:http://download.csdn.net/detail/u013286716/7041185    

Dubbo-admin-2.5.4.war下载地址为:http://download.csdn.net/detail/liweifengwf/7784901

1.部署dubbo

 1)首先可以通过tomcat解压Dubbo-admin-2.5.4.war,即把该war包放在tomcat的webapps下,然后启动tomcat即可。

 2)清空webapps\ROOT 下的所有文件,把1)步运行dubbo-admin-2.5.4的文件放在ROOT下,一定要注意的是:不要把解压后的顶层文件夹也放在ROOT下,只保留顶层文件夹下的文件。如下图

3)修改webapps\ROOT\WEB-INF\dubbo.properties文件。我的路径是:D:\apache-tomcat-7.0.42\webapps\ROOT\WEB-INF\dubbo.properties

如下图,其中IP地址为你本地电脑的IP地址:

dubbo.registry.address=zookeeper://192.168.23.29:2181

dubbo.admin.root.password=root

dubbo.admin.guest.password=root

 

启动tomcat:

 

说明:确定zookeeper启动后再去启动tomcat

 

4)保存成功后,启动tomcat,在浏览器中直接输入:localhost:8080(这个是tomcat的默认端口号,如果你自己有修改,就换成你修改后的端口号即可),点接回车键,页面弹出让你登录的对话框,输入用户名root,密码:root即可登录成功。

如下图登录成功后的页面:

 

 

 

 

 

 

 

 

整体说明:

    Zookeeper(注册中心)部署到29的机子上,服务提供者和服务消费者均在29的机子上运行,当然我们也可以分别将服务提供者和服务消费者部署到不同的两台机子上。

优点:

    服务提供者和服务消费者只需要知道注册中心即可,它们之间打交道需通过注册中心这个第三方,只要是注册中心中已经注册的服务,我们均可以使用,实现了服务提供者和服务消费者间的解耦。

 

 spring整合:

 

注意:整合的时候加入tomcat下的dubbo的lib的相关jar......

 

1:服务提供者

 

定义服务接口:(该接口需单独打包,在服务提供方和消费方共享)

 

[java] view plain copy
 
 print?
  1. package com.unj.dubbotest.provider;  
  2.   
  3. import java.util.List;  
  4.   
  5. public interface DemoService {  
  6.   
  7.     String sayHello(String name);  
  8.   
  9.     public List getUsers();  
  10.   
  11. }  

 

 

在服务提供方实现接口:(对服务消费方隐藏实现)

[java] view plain copy
 
 print?
  1. package com.unj.dubbotest.provider.impl;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import com.unj.dubbotest.provider.DemoService;  
  7.   
  8. public class DemoServiceImpl implements DemoService {  
  9.   
  10.     public String sayHello(String name) {  
  11.         return "Hello " + name;  
  12.     }  
  13.   
  14.     public List getUsers() {  
  15.         List list = new ArrayList();  
  16.         User u1 = new User();  
  17.         u1.setName("hejingyuan");  
  18.         u1.setAge(20);  
  19.         u1.setSex("f");  
  20.   
  21.         User u2 = new User();  
  22.         u2.setName("xvshu");  
  23.         u2.setAge(21);  
  24.         u2.setSex("m");  
  25.   
  26.           
  27.         list.add(u1);  
  28.         list.add(u2);  
  29.           
  30.         return list;  
  31.     }  
  32. }  

 

 

用Spring配置声明暴露服务:

 

[html] view plain copy
 
 print?
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"  
  4.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
  5.         http://www.springframework.org/schema/beans/spring-beans.xsd  
  6.         http://code.alibabatech.com/schema/dubbo  
  7.         http://code.alibabatech.com/schema/dubbo/dubbo.xsd  
  8.         ">  
  9.   
  10.     <!-- 具体的实现bean -->  
  11.     <bean id="demoService" class="com.unj.dubbotest.provider.impl.DemoServiceImpl" />  
  12.   
  13.     <!-- 提供方应用信息,用于计算依赖关系 -->  
  14.     <dubbo:application name="xs_provider" />  
  15.   
  16.     <!-- 使用multicast广播注册中心暴露服务地址 -->  
  17.     <!--<dubbo:registry address="multicast://224.5.6.7:1234" /> -->  
  18.       
  19.     <!-- 使用zookeeper注册中心暴露服务地址 --即zookeeper的所在服务器ip地址和端口号 -->  
  20.     <dubbo:registry address="zookeeper://192.168.24.213:2181" />  
  21.   
  22.     <!-- 用dubbo协议在20880端口暴露服务 -->  
  23.     <dubbo:protocol name="dubbo" port="20880" />  
  24.   
  25.     <!-- 声明需要暴露的服务接口 -->  
  26.     <dubbo:service interface="com.unj.dubbotest.provider.DemoService"  
  27.         ref="demoService" />  
  28.   
  29. </beans>  

 

加载Spring配置,启动服务(或者将项目建为web项目,然后在web.xml中配置好spring的启动,然后扔到tomcat中即可提供服务):

 

[java] view plain copy
 
 print?
  1. package com.unj.dubbotest.provider.impl;  
  2.   
  3. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  4.   
  5. public class Provider {  
  6.   
  7.     public static void main(String[] args) throws Exception {  
  8.         ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(  
  9.                 new String[] { "applicationContext.xml" });  
  10.         context.start();  
  11.         System.in.read(); // 为保证服务一直开着,利用输入流的阻塞来模拟  
  12.     }  
  13. }  

 

 

 

2:服务消费者

 

通过Spring配置引用远程服务:

 

[html] view plain copy
 
 print?
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"  
  4.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
  5.         http://www.springframework.org/schema/beans/spring-beans.xsd  
  6.         http://code.alibabatech.com/schema/dubbo  
  7.         http://code.alibabatech.com/schema/dubbo/dubbo.xsd  
  8.         ">  
  9.   
  10.     <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->  
  11.     <dubbo:application name="hjy_consumer" />  
  12.   
  13.     <!-- 使用zookeeper注册中心暴露服务地址 -->  
  14.     <!-- <dubbo:registry address="multicast://224.5.6.7:1234" /> -->  
  15.     <dubbo:registry address="zookeeper://192.168.24.213:2181" />  
  16.   
  17.     <!-- 生成远程服务代理,可以像使用本地bean一样使用demoService -->  
  18.     <dubbo:reference id="demoService"  
  19.         interface="com.unj.dubbotest.provider.DemoService" />  
  20.   
  21. </beans>  

 

 

调用服务测试:

[java] view plain copy
 
 print?
  1. package com.alibaba.dubbo.demo.pp;  
  2.   
  3. import java.util.List;  
  4.   
  5. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  6.   
  7. import com.unj.dubbotest.provider.DemoService;  
  8.   
  9. public class Consumer {  
  10.   
  11.     public static void main(String[] args) throws Exception {  
  12.         ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(  
  13.                 new String[] { "applicationContext.xml" });  
  14.         context.start();  
  15.   
  16.         DemoService demoService = (DemoService) context.getBean("demoService");  
  17.         String hello = demoService.sayHello("hejingyuan");  
  18.         System.out.println(hello);  
  19.   
  20.         List list = demoService.getUsers();  
  21.         if (list != null && list.size() > 0) {  
  22.             for (int i = 0; i < list.size(); i++) {  
  23.                 System.out.println(list.get(i));  
  24.             }  
  25.         }  
  26.         System.in.read();  
  27.     }  
  28.   
  29. }  

 

zookeeper启动,tomcat启动dubbo,然后运行2个main。

测试结果:

 

 

 

附:

1.在消费端, 配置需要调用的服务接口的包名必须和服务端暴露的服务接口包名一致,否则出错。找不到服务 

 

2.如果想修改dubbo的暴露端口号。还没找到。

 

 

 

 

 

分享到:
评论

相关推荐

    springBoot+dubbo+zookeeper分布式微服务

    在"springBoot+zookeeper+dubbo"的项目中,SpringBoot作为基础,负责初始化应用环境和配置管理;Dubbo则作为服务治理框架,定义服务接口,实现服务的远程调用;Zookeeper作为服务注册与发现的中间件,维护服务提供者...

    springboot+dubbo+zookeeper构建的分布式调用服务框架

    【SpringBoot + Dubbo + ZooKeeper 构建的分布式调用服务框架】 SpringBoot 是一个由 Pivotal 团队创建的 Java 框架,它简化了在 Spring 框架上创建独立的、生产级别的基于 Java 的应用程序。SpringBoot 通过提供...

    dubbo+zookeeper+spring+springMVC+mybatis

    【标题】"dubbo+zookeeper+spring+springMVC+mybatis" 描述了一个基于这些技术构建的服务消费方与服务提供方的项目架构。在这个架构中,`Dubbo`是核心的服务框架,它负责服务的注册与发现;`Zookeeper`作为注册中心...

    Dubbo+Zookeeper+Spring整合,一个简单的Demo源码

    【标题】 Dubbo+Zookeeper+Spring整合:一个简单的Demo源码分析 在这个教程中,我们将深入探讨如何将三个关键的开源技术——Dubbo、Zookeeper和Spring——整合在一起,构建一个基本的服务发现和调用的分布式应用。...

    Spring Boot 整合 Dubbo + Zookeeper 实现服务者与消费者的数据调用

    1.SpringBoot聚合工程整合Dubbo,实现服务提供者与服务消费者的数据调用, 2.该项目提高了自己对Spring Boot整合Dubbo的理解,并深刻的认识到了服务者与消费者之间的调用及流程 4. Dubbo配置全部采用yml文件配置,...

    zookeeper+dubbo+spring

    在IT行业中,Zookeeper、Dubbo和Spring是三个非常重要的组件,它们在分布式系统和微服务架构中扮演着核心角色。下面将详细解释这三个技术及其相互间的整合。 **Zookeeper** 是一个分布式的,开放源码的分布式应用...

    dubbo+zookeeper+spring -demo

    这个“dubbo+zookeeper+spring -demo”项目是一个典型的分布式系统架构实践,它展示了如何利用Dubbo构建分布式的微服务,通过Zookeeper实现服务的注册与发现,结合Spring简化服务的管理和调用。这样的架构模式在现代...

    springcloudalibaba微服务dubbo+sentinel+gateway+zookeeper+nacos的demo

    这个“springcloudalibaba微服务dubbo+sentinel+gateway+zookeeper+nacos的demo”压缩包文件,显然是一个实战示例,旨在帮助开发者理解并实践这些关键组件的集成与使用。下面将详细解析这些组件以及它们在微服务架构...

    Spring+dubbo+zookeeper

    标题 "Spring + Dubbo + Zookeeper" 涉及到的是一个常见的微服务架构组合,主要涵盖Spring框架、Dubbo服务治理框架以及Zookeeper作为注册中心。这些技术在分布式系统中广泛使用,构建高可用、可扩展的服务网络。 ...

    Dubbo+Zookeeper+Spring所需jar包(全)

    在IT行业中,分布式服务框架是大型企业级应用的基石,其中Dubbo、Zookeeper和Spring的结合使用是非常常见的一种架构模式。本知识点将详细介绍这三个组件以及它们如何协同工作。 Dubbo是一个高性能、轻量级的Java ...

    dubbo+sping+zookeeper整合例子完整版(包括步骤文档和所有jar)

    【标题】"dubbo+spring+zookeeper整合案例详解" 【描述】该资源是一个全面的教程,涵盖了将Dubbo、Spring和Zookeeper整合到一起的实际操作步骤,包括完整的配置文件和必要的jar包。遗憾的是,它没有涉及Dubbo与...

    DUBBO+Zookeeper小例子

    2. **Zookeeper**:Apache ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终将简单易用的接口和性能高效、...

    dubbo+zookeeper分布式服务

    【标题】:“Dubbo + ZooKeeper 分布式服务” 【内容】: 在现代软件开发中,分布式服务架构已经成为大型系统设计的重要组成部分。Dubbo 和 ZooKeeper 是两种在分布式环境中广泛使用的开源工具,它们分别承担了...

    Springboot + Mybatis+Dubbo+Zookeeper+nginx+redis+HTML.docx

    在《Springboot + Mybatis+Dubbo+Zookeeper+nginx+redis+HTML.docx》这份文档中,作者详细介绍了如何集成并使用Spring Boot、MyBatis、Dubbo、Zookeeper、Nginx以及Redis等多种技术,构建一个高效稳定的应用系统。...

    dubbo+zookeeper实例

    【描述】提到的" dubbo+zookeeper+springmvc实例demo"是一个综合性的应用示例,它将Dubbo的远程调用能力、Zookeeper的服务发现和注册功能与Spring MVC的Web开发框架结合在一起。这个实例通常会展示如何在Spring MVC...

    Dubbo+Zookeeper+SpringMVC整合实例

    2. **创建服务提供者**:在服务提供者的应用中,配置Dubbo的`application.xml`,声明服务接口和实现类,以及注册中心(通常是Zookeeper的地址)。 3. **服务注册**:在服务启动时,Dubbo会自动将服务信息注册到...

    dubbo+zookeeper+tomcat资源包

    【标题】"dubbo+zookeeper+tomcat资源包"涵盖了三个关键的IT技术组件:Dubbo、ZooKeeper和Tomcat。这些技术在分布式系统、服务治理和Web应用部署方面扮演着重要角色。 Dubbo是阿里巴巴开源的一个高性能、轻量级的...

    dubbo+zookeeper整合案例

    ### Dubbo与Zookeeper整合案例详解 #### 一、Dubbo简介 Dubbo是由阿里巴巴开源的一款高性能、轻量级的微服务框架,主要用于构建服务化的应用程序。它支持多种协议和服务发现机制,能够帮助开发者轻松地实现服务的...

Global site tag (gtag.js) - Google Analytics