dubbo+zookeeper 分布式项目搭建

Dubbo建议使用Zookeeper作为服务的注册中心。

1.   Zookeeper的作用:

        zookeeper用来注册服务和进行负载均衡,哪一个服务由哪一个机器来提供必需让调用者知道,简单来说就是ip地址和服务名称的对应关系。当然也可以通过硬编码的方式把这种对应关系在调用方业务代码中实现,但是如果提供服务的机器挂掉调用者无法知晓,如果不更改代码会继续请求挂掉的机器提供服务。zookeeper通过心跳机制可以检测挂掉的机器并将挂掉机器的ip和服务对应关系从列表中删除。至于支持高并发,简单来说就是横向扩展,在不更改代码的情况通过添加机器来提高运算能力。通过添加新的机器向zookeeper注册服务,服务的提供者多了能服务的客户就多了。

2.  dubbo:

      是管理中间层的工具,在业务层到数据仓库间有非常多服务的接入和服务提供者需要调度,dubbo提供一个框架解决这个问题。

      注意这里的dubbo只是一个框架,至于你架子上放什么是完全取决于你的,就像一个汽车骨架,你需要配你的轮子引擎。这个框架中要完成调度必须要有一个分布式的注册中心,储存所有服务的元数据,你可以用zk,也可以用别的,只是大家都用zk。

3. zookeeper和dubbo的关系:
      Dubbo的将注册中心进行抽象,是得它可以外接不同的存储媒介给注册中心提供服务,有ZooKeeper,Memcached,Redis等。
      引入了ZooKeeper作为存储媒介,也就把ZooKeeper的特性引进来。首先是负载均衡,单注册中心的承载能力是有限的,在流量达到一定程度的时候就需要分流,负载均衡就是为了分流而存在的,一个ZooKeeper群配合相应的Web应用就可以很容易达到负载均衡;资源同步,单单有负载均衡还不够,节点之间的数据和资源需要同步,ZooKeeper集群就天然具备有这样的功能;命名服务,将树状结构用于维护全局的服务地址列表,服务提供者在启动的时候,向ZK上的指定节点/dubbo/${serviceName}/providers目录下写入自己的URL地址,这个操作就完成了服务的发布。其他特性还有Mast选举,分布式锁等。

dubbo简介:


           系统间服务调用方式有三种,浏览器直接访问,通过ajax或者jsonp方式请求。第二种,httpclient方式发起http协议的请求,是后台调用。第三种基于RPC方式的远程过程调用协议的请求。DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。


了解dubbo工作原理,下面的依赖关系图是重点内容:




    图中小方块Protocol, Cluster, Proxy, Service, Container, Registry, Monitor代表层或模块,蓝色的表示与业务有交互,绿色的表示只对Dubbo内部交互。
    图中背景方块Consumer, Provider, Registry, Monitor代表部署逻辑拓普节点。
    图中蓝色虚线为初始化时调用,红色虚线为运行时异步调用,红色实线为运行时同步调用。
    图中只包含RPC的层,不包含Remoting的层,Remoting整体都隐含在Protocol中。


      ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务。它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。它的作用相当于对集群的管理,消费者和生产者都要到zookeeper进行服务的发布和注册。


下面我们亲手搭建一个分布式的服务:


1.将dubbo包安装到本地maven

2.安装zookeeper

3.写服务提供方代码(API项目,服务实现层项目)

4.写服务调用方代码


第一步,略

第二步,略


遇到三个问题:

    1.在dubbo包install的时候发生一个问题:Maven : error in opening zip file when running maven。


      解决:我们要做的就是删除repository目录下提示“error in opening zip file",然后从新编译就OK了,如果遇到多个这样的错误只需要把出现这种错误的目录删除,从新编译就行了。


    2. Dubbo admin在JDK1.8环境运行报Invalid property 'URIType' of bean class


      原因:URIType 的get和set方法写得不规范。
      解决方法:降级jdk到1.7。


      3.问题:dubbo部署到tomcat,一直执行到 INFO zkclient.ZkEventThread - Starting ZkClient 就不会再继续往下执行了

 

      解决:这个简单,是因为zookeeper服务没有启动。


3.写服务提供方代码(API项目,服务实现层项目)


三个maven项目,dubbo-a、dubbo-b、dubbo-b-api。其中A是服务调用方,B是服务提供方,API项目中放着B暴露的接口,和POJO。A和B项目都依赖dubbo-b-api。dubbo是采用spring配置的,所以需要导入spring容器。



dubbo-b:






dubbo-b-api:



dubbo-a:






实现类修不展示了,随便写点业务逻辑做测试就行,主要是配置文件的配置。

dubbo-a/dubbo-comsummer.xml:

  1. <beans xmlns="http://www.springframework.org/schema/beans"  
  2.     xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"  
  3.     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"  
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"  
  5.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  
  6.     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd  
  7.     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd  
  8.     http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">  
  9.     <!-- 提供方应用信息,用于计算依赖关系 -->  
  10.     <dubbo:application name="dubbo-a-consumer"/>  
  11.       
  12.     <!-- 这里使用的注册中心是zookeeper -->  
  13.     <dubbo:registry address="zookeeper://127.0.0.1:2181"  
  14.         client="zkclient"/>  
  15.           
  16.     <!-- 从注册中心中查找服务 -->  
  17.     <dubbo:reference id="userService" interface="cn.itcast.dubbo.service.UserService"/>  
  18.       
  19. </beans>  
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	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-4.0.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
	http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
	<!-- 提供方应用信息,用于计算依赖关系 -->
	<dubbo:application name="dubbo-a-consumer"/>
	
	<!-- 这里使用的注册中心是zookeeper -->
	<dubbo:registry address="zookeeper://127.0.0.1:2181"
		client="zkclient"/>
		
	<!-- 从注册中心中查找服务 -->
    <dubbo:reference id="userService" interface="cn.itcast.dubbo.service.UserService"/>
	
</beans>

dubbo-b/dubbo-server.xml:

  1. <beans xmlns="http://www.springframework.org/schema/beans"  
  2.     xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"  
  3.     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"  
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"  
  5.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  
  6.     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd  
  7.     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd  
  8.     http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">  
  9.     <!-- 提供方应用信息,用于计算依赖关系 -->  
  10.     <dubbo:application name="dubbo-b-server"/>  
  11.       
  12.     <!-- 这里使用的注册中心是zookeeper -->  
  13.     <dubbo:registry address="zookeeper://127.0.0.1:2181"  
  14.         client="zkclient"/>  
  15.           
  16.     <!-- 用dubbo协议在20880端口暴露服务 -->  
  17.     <dubbo:protocol name="dubbo" port="20880"/>  
  18.       
  19.     <!-- 将该接口暴露到dubbo中 -->  
  20.     <dubbo:service interface="cn.itcast.dubbo.service.UserService"  
  21.         ref="userServiceImpl"/>  
  22.           
  23.           
  24.     <!-- 将具体的实现类加入到Spring容器中 -->  
  25.     <bean id="userServiceImpl" class="cn.itcast.dubbo.service.impl.UserServiceImpl"/>  
  26.       
  27.     <dubbo:monitor protocol="registry"/>  
  28. </beans>  
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	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-4.0.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
	http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
	<!-- 提供方应用信息,用于计算依赖关系 -->
	<dubbo:application name="dubbo-b-server"/>
	
	<!-- 这里使用的注册中心是zookeeper -->
	<dubbo:registry address="zookeeper://127.0.0.1:2181"
		client="zkclient"/>
		
	<!-- 用dubbo协议在20880端口暴露服务 -->
	<dubbo:protocol name="dubbo" port="20880"/>
	
	<!-- 将该接口暴露到dubbo中 -->
	<dubbo:service interface="cn.itcast.dubbo.service.UserService"
	    ref="userServiceImpl"/>
	    
	    
	<!-- 将具体的实现类加入到Spring容器中 -->
	<bean id="userServiceImpl" class="cn.itcast.dubbo.service.impl.UserServiceImpl"/>
	
	<dubbo:monitor protocol="registry"/>
</beans>

为什么会有api项目,把公共的内容抽取出来,如接口,pojo,解决了代码重复的问题,同时可以统一管理。



dubbo监控工具:dubbo-monitor-simple 

服务运行之后,可以通过:dubbo-monitor-simple 监控dubbo服务。查看服务调用次数,等等。这里最大并发数是累加的。



dubbo管理工具:dubbo-admin-2.5.3.war

1.解压到tomcat的root下面,替换了
2.配置D:\dubbo-tomcat7.0\webapps\ROOT\WEB-INF\dubbo.properties
3.启动tomcat,一定要先启动zkServer.cmd

最后访问8080端口,就可以看到dubbo的管理界面了



总结:

     多学习,多思考。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值