dubbo系统学习(一)-dubbo入门实例

来源:互联网 发布:淘宝怎么卖二手手机 编辑:程序博客网 时间:2024/06/02 05:48

自dubbo开源以来,越来越多企业用上dubbo,使得这项技术越来越受欢迎,那博主就带各位学习一下dubbo,首先学习一项技术,得知道这项技术能干什么及好处:

那么,Dubbo是什么?

Dubbo |ˈdʌbəʊ| 是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。 其核心部分包含:

  • 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。
  • 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持
  • 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器

Dubbo能做什么?

  • 透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。
  • 软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。
  • 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。

了解了这些,那我们就通过一个简单实例来边实践边讲吧:

首先我们假设有这样一个工程edu-demo,目录结构如下:

这个工程包含了model,service.web层所有代码,在企业开发中,很多小项目确实是这样做的,将所有代码放在一个项目工程中,但是随着项目的日益庞大,以及出于对网站整体可用性的考虑,这时候需要把项目拆分成多个项目,模块,最基本的是要把model,service,web拆分开来,而dubbo就是基于这种分布式结构的分布式RPC框架,下面我们将这个工程拆分成三个工程:edu-facade-user,edu-service-user,edu-web-boss,其中edu-facade-user是实体类,接口类以及一些其他工程也需要用到的基础类,工具类;edu-service-user是接口的实现,在这里也就是dubbo中的服务提供者,edu-web-boss是一些action,也就相当于dubbo的消费者。实际拆分的工程代码在我的github中下载:https://github.com/zjqbobo/master2,其中dubbo_demo就是文件夹下就是我们需要的项目代码,这里还有一个edu-common-parent,这是所有另外三个maven工程的maven父工程,将下载下来的四个工程都导入eclipse,直到四个项目都没有报错。

这里讲一下他们之间的联系,首先edu-facade-user是另外两个工程都需要在pom文件中指定依赖的,大家可以找到另外两个工程pom文件中都有这样一段来引入它:

<dependency>
   <groupId>wusc.edu.facade</groupId>
   <artifactId>edu-facade-user</artifactId>
   <version>${edu-facade-user.version}</version>
  </dependency>

都需要引入它是因为一个要实现它的接口,一个要调用它里面的方法,另外大家还会发现,配置文件中,edu-service-user配置文件重要有spring配置文件及mybatis配置文件及数据源的连接信息配置文件,而edu-web-boss主要是spring配置文件及struts2配置文件,这能看出在这种分布式的项目中,配置文件的加载职责也是跟项目职责对应起来的。另外edu-service-user有一个dubbo-provider.xml配置文件,内容如下:

<!-- 提供方应用信息,用于计算依赖关系 -->
 <dubbo:application name="edu-service-user" />

 <!-- 使用zookeeper注册中心暴露服务地址 -->
 <dubbo:registry protocol="zookeeper" address="45.32.47.156:2181" />

 <!-- 用dubbo协议在20880端口暴露服务 -->
 <dubbo:protocol name="dubbo" port="20880" />
  
 <!-- 用户服务接口 -->
 <dubbo:service interface="wusc.edu.facade.user.service.PmsUserFacade" ref="pmsUserFacade" />

说明:第一句表示服务提供者的应用名;第二句表示向服务提供者向哪个地址注册服务,dubbo推荐使用zookeeper作为注册中心,所以这里表示向45.32.47.156这个机器的zookeeper服务注册,这个2181端口是服务提供者edu-service-user跟zookeeper通信端口;第三句就是表示服务消费者要访问该服务提供者的服务时通信的端口;第四句就是具体提供的服务,可以有很多个,这里只写一个。


在edu-web-boss中也有一个dubbo-consumer.xml这样的配置文件,这是服务消费者的配置文件:

<!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
 <dubbo:application name="edu-web-boss" />

 <!-- 使用zookeeper注册中心暴露服务地址 -->
 <!-- 注册中心地址 -->
 <dubbo:registry protocol="zookeeper" address="45.32.47.156:2181" />
 
 <!-- 用户服务接口 -->
 <dubbo:reference interface="wusc.edu.facade.user.service.PmsUserFacade" id="pmsUserFacade" check="false" />

这里差不多,就不赘述了。

这里需要特别说明的是,dubbo的所谓服务注册,并不是真的把类注册到zookeeper,而只是向服务消费者提供服务提供者的访问地址端口,当服务消费者要调用服务时,zookeeper向它返回对应服务提供者暴露的地址,端口,这样服务消费者就与服务提供者通过返回的地址建立联系,调用具体服务。

好,这里讲完了工程的简单拆分,下一篇就将zookeeper的安装和配置。



原创粉丝点击