为什么80%的码农都做不了架构师?>>>   

例子参考地址:http://www.cnblogs.com/Javame/p/3632473.html

一、实例搭建

1、搭建框架前先下载Zookeeper(http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.3.6/zookeeper-3.3.6.tar.gz)

2、解压Zookeeper到指定文件目录,在bin目录下双击zkServer.cmd(Windows),启动Zookeeper服务,正常应该是如下图所示,错误则看第三步

3、若启动失败,则在conf目录下,新建zoo.cfg配置文件

配置如下,主要修改路径地址(参考:http://blog.csdn.net/morning99/article/details/40426133)

# 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 anacknowledgement

syncLimit=5

# the directory where the snapshot isstored.  //镜像数据位置

dataDir=F:\Work\Zookeeper\data

#日志位置

dataLogDir=F:\Work\Zookeeper\logs

# the port at which the clients willconnect  客户端连接的端口

clientPort=2181

参数详解:

1.tickTime:CS通信心跳数

Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。tickTime以毫秒为单位。

2.initLimit:LF初始通信时限

集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)。

3.syncLimit:LF同步通信时限
集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数(tickTime的数量)。

4.dataDir:数据文件目录
Zookeeper保存数据的目录,默认情况下,Zookeeper将写数据的日志文件也保存在这个目录里。

5.dataLogDir:日志文件目录
Zookeeper保存日志文件的目录。

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

7.服务器名称与地址:集群信息(服务器编号,服务器地址,LF通信端口,选举端口)
这个配置项的书写格式比较特殊,规则如下:

server.N=YYY:A:B

eg:

server.0=233.34.9.144:2008:6008

server.1=233.34.9.145:2008:6008

Zookeeper配置参数详解:http://blog.csdn.net/poechant/article/details/6650249

3、配置pom.xml(Provider与Consumer配置一致)

<dependencies>
        <!-- junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

<dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>servlet-api</artifactId>
            <version>6.0.45</version>
        </dependency>

<!-- dubbo -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.5.3</version>
        </dependency>

<!-- spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring</artifactId>
            <version>2.5.6</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.3.3.RELEASE</version>
        </dependency>

<!-- zookeeper -->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.5.2-alpha</version>
        </dependency>
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>
    </dependencies>

Provider方:

结构如下图(和Consumer方类似)

4、具体类的编写(和Consumer方一致)

在model下新建一个User类,但是由于使用Dubbo,所以一定要实现序列化Serializable类

public class User implements Serializable{private static final long serialVersionUID = -1009733312893309388L;private String name;private String sex;private Integer age;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}
}

然后在service下新建一个DemoService接口(和Consumer方一致),impl下新建DemoServiceImpl实现接口

public interface DemoService {String sayHello(String name);  public List<User> getUsers();
}public class DemoServiceImpl implements DemoService {public String sayHello(String name) {return "Hello " + name;}public List<User> getUsers() {List<User> list = new ArrayList<User>();  User u1 = new User();  u1.setName("jack");  u1.setAge(20);  u1.setSex("女");  User u2 = new User();  u2.setName("tom");  u2.setAge(21);  u2.setSex("男");  User u3 = new User();  u3.setName("rose");  u3.setAge(19);  u3.setSex("男");  list.add(u1);  list.add(u2);  list.add(u3);  return list;}
}

然后provider下新建一个Provider类,实现在Zookeeper中注册

public class Provider {public static void main(String[] args) {ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"application.xml"});  context.start();  try {System.in.read();// 为保证服务一直开着,利用输入流的阻塞来模拟   } catch (IOException e) {e.printStackTrace();} }
}

5、application.xml的配置

<?xml version="1.0" encoding="UTF-8"?>
<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  
        ">
   
    <!-- 具体的实现bean -->  
    <bean id="demoService" class="com.zd.dubbo.service.impl.DemoServiceImpl" />  
      
    <!-- 提供方应用信息,用于计算依赖关系 -->  
    <dubbo:application name="xixi_provider"  />  
    
    <!-- 使用zookeeper注册中心暴露服务地址 -->  
    <dubbo:registry address="zookeeper://127.0.0.1:2181" />   
    
    <!-- 用dubbo协议在20880端口暴露服务 -->  
    <dubbo:protocol name="dubbo" port="20880" />  
   
    <!-- 声明需要暴露的服务接口 -->  
    <dubbo:service interface="com.zd.dubbo.service.DemoService" ref="demoService" />  
      
</beans>

Consumer方:

目录结构

我理解的是Provider方在Zookeeper注册,暴露服务地址以及DemoService接口,然后Consumer方就可以调用其暴露出来的接口,具体实现由Provider完成,Consumer方只需要拥有与Provider方一致的接口,调用接口方法就实现远程调用。

主要贴出与Provider不同的代码,其他与其类似或一致的就不贴了。

1、consumer下新建Consumer类

public class Consumer {public static void main(String[] args) {ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(  new String[] { "application.xml" });  context.start();  DemoService demoService = (DemoService) context.getBean("demoService"); //  String hello = demoService.sayHello("tom"); //调用sayHello方法System.out.println(hello); //获取用户列表List<User> list = demoService.getUsers();  if (list != null && list.size() > 0) {  for (int i = 0; i < list.size(); i++) {  System.out.println(list.get(i));  }  }  try {System.in.read();} catch (IOException e) {e.printStackTrace();}  }
}

2、application.xml的配置

<?xml version="1.0" encoding="UTF-8"?>
<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="hehe_consumer" />  
  
    <!-- 使用zookeeper注册中心暴露服务地址 -->  
    <dubbo:registry address="zookeeper://127.0.0.1:2181" />  
  
    <!-- 生成远程服务代理,可以像使用本地bean一样使用demoService -->  
    <dubbo:reference id="demoService" interface="com.zd.dubbo.service.DemoService" />  
</beans>

然后先启动Provider再启动Consumer,结果如下图:

二、常见问题

1、Dubbo采用Spring配置方式,加入Schema即可,如下

但是可能报错:

Multiple annotations found at this line:
- cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'dubbo:application'.
- schema_reference.4: Failed to read schema document 'http://code.alibabatech.com/schema/dubbo/dubbo.xsd', 
 because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not 
 <xsd:schema>.

解决方案:

在maven下载的dubbo.jar(路径:C:\Users\Administrator\.m2\repository\com\alibaba\dubbo\2.5.3)解压文件中可以找到dubbo.xsd(搜索查找即可)

然后Window-->Preferences-->XML-->XML Catalog-->Add-->Catalog Entry

由于Uri Location的路径中不能包含 .,所以我将其重新拷贝到另一个地方了,一定要修改Key,配置如下:

然后右键项目,选择Validate!

转载于:https://my.oschina.net/eager/blog/751468

Spring+Dubbo+Zookeeper简单框架与使用相关推荐

  1. Spring + Dubbo + zookeeper (linux) 框架搭建

    2019独角兽企业重金招聘Python工程师标准>>> dubbo简介 节点角色说明: Provider: 暴露服务的服务提供方. Consumer: 调用远程服务的服务消费方. R ...

  2. 160719、Spring + Dubbo + zookeeper (linux) 框架搭建

    转载一篇博客,写得不错(至少我参考一下搭建成功了) 转载地址:http://my.oschina.net/wangt10/blog/522799 dubbo简介 节点角色说明: Provider: 暴 ...

  3. SSM+Maven+Dubbo+Zookeeper简单项目实战以及易错注意点

    最近为了熟悉Dubbo远程过程调用架构的使用,并结合SSM+Maven整合了简单的一套项目实战 直接看项目结构图 各模块介绍 dubbo-common:存放项目需要的公众类,像查询模型.数据库实体模型 ...

  4. Maven+SpringMVC+Dubbo+zookeeper 简单的入门demo配置

    参考:http://blog.csdn.net/aixiaoyang168/article/details/51362675 dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调 ...

  5. zookeeper 密码_「附源码」Dubbo+Zookeeper 的 RPC 远程调用框架

    技术博文,及时送达 作者 | 码农云帆哥 链接 | blog.csdn.net/sinat_27933301 上一篇:从零搭建创业公司后台技术栈 这是一个基于Dubbo+Zookeeper 的 RPC ...

  6. spring boot 整合Dubbo/Zookeeper

    spring boot 整合Dubbo/Zookeeper 只是一个简单的整合demo,只做思路分析叙述,具体功能不做描述. 一.技术介绍 •ZooKeeper ZooKeeper 是一个分布式的,开 ...

  7. spring cloud+zookeeper+feign整合 简单实例(一)

    一.前言 各位热爱知识的小伙伴们大家好呀!很高兴大家能点开这个博客,这是我个人的第一篇博客,之后也会持续的更新java以及spring项目的相关代码,希望大家持续关注.如果对本篇博客有什么不懂的地方或 ...

  8. 分布式系统设计原理与方案Dubbo+Zookeeper+Spring整合

    2019独角兽企业重金招聘Python工程师标准>>> 一直在思考分布式系统设计的问题,业务对象原封不动的情况下部署在客户端和服务器端,可以根据配置文件选择是连接服务器还是连接本地的 ...

  9. Spring Boot 2.x(十五):Dubbo + Zookeeper + Dubbo Admin

    Dubbo 简介 Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的RPC实现服务的输出和输入功能,可以和Spring框架无缝集成. 它提供了三大核心能力: 面向接口的远程 ...

最新文章

  1. 教你如何用阿里canal
  2. cesium面积计算_cesium-长度测量和面积测量
  3. vue项目使用npm run dev 编译到一半不动了
  4. POJ1426-Find The Multiple(DFS)
  5. PHP提高编程效率的方法
  6. H5 Canvas maximum-scale图像模糊解决办法
  7. Python 快速入门,你想要的就在这里了!
  8. 过程、性能基线、性能模型与目标之间的关系
  9. maven项目发布到tomcat后没有lib目录解决方案
  10. Chrome控制台console的各种用法(方便调试)
  11. 结构体赋值 -- 构造函数
  12. vscode实现右键文件夹选择open with code
  13. Selenium测试指南
  14. 高中数学培训高一数学提分技巧
  15. nuc8i5beh安装黑苹果的安装教程,接近完美运行
  16. 【PTA~L1-080 乘法口诀数列】
  17. 中国汽车使用保险行业市场供需与战略研究报告
  18. 哔哩哔哩2020校园招聘技术类笔试卷(二)
  19. 关于java8的default关键字浅薄理解
  20. 基于AOP和HashMap原理学习,开发Mysql分库分表路由组件!

热门文章

  1. 国内首家!携程每周两天可在家“躺平”,76% 的员工主动报名
  2. 发推吐槽职场性别歧视后,苹果女高管被无限期行政休假
  3. 中国程序员超 5000 万?北上广等一线城市 IT 岗位已开始饱和过剩?
  4. 去伪存真,更多区块链落地应用即将涌现
  5. 搜索和其他机器学习问题有什么不同?
  6. 免费的新一代私有云平台Nano v0.3.1发布:云主机快照及媒体管理
  7. 第一讲 IDLE使用
  8. 全面理解Javascript闭包和闭包的几种写法及用途【转】
  9. 清华大学 pip 源
  10. Kafka 安装及快速入门