一:Dubbo简介
Dubbo是阿里巴巴提供的开源的SOA(面向服务的体系结构)服务化治理的技术框架,据说只是一部分开源的,但一些基本的需求已经可以满足的,而且可扩展性。是一种能取代PHRPC的服务调用方式,优点在于配置简单,二次开发性强,同时DUBBO对代码的侵入性低。
二:Dubbo整体理解
现在DUBBO的配置文件主要分为两部门dubboConsumer.xml (可以理解为客户端) ,dubboProvider.xml(服务端)用通俗的话来讲dubboConsumer是调用方,dubboProvider是被调用方.
Dubbo的框架图:
怎么去理解这个框架呢? 简单的说就是对于服务端与客户端来说它们有一个公共的注册中心Registry ,服务端会将需要被调用的服务放到注册中心上去,客户端将会去注册中心里调用自己需要的服务,现在我的会搭建DUBBO的监控中心Monitor,用于对DUBBO调用的监控,包括了解接口调用的具体走向,黑白名单控制等(这上面有很多可视化的功能,后期可以自己摸索)。
三:本地环境搭建
在明白DUBBO整体结构之后,我们本地环境的搭建就变得容易了,我们首先需要一个注册中心,然后让我们的服务端和客户端都指向这个注册中心,然后客户端要调用哪个接口在dubboConsumer.xml(名字可以自定义,具体说明什么,请看下面实例)中说明一下,服务端要暴露哪个接口在dubboProvider.xml里说明一下。这样简单的DEMO就可以完成了。下面,LZ将自己的整个搭建过程详细的分享给大家。
3.1.注册中心搭建(Registry)
关于这个注册中心,LZ这里给到的是zookeeper.rar的压缩包。解压之后,我们需要在zookeeper注册中心中新建两个目录,一个叫data,一个叫logs。如图:
当然LZ提供的这个压缩包已经建好了这两个文件夹。这两个文件夹简单的理解就是存放数据和日志的地方。然后我们点开目录中的conf文件夹,找到zoo.cfg,打开此配置文件,如图:
1.控制心跳和超时,以毫秒为单位。
2.初始化时间,以毫秒为单位。
3.请求与响应时间,以毫秒为单位。
4.数据存放的地方,这就是一开始LZ说的,新建文件夹data的地方。
5.日志存放的地方,这就是一开始LZ说的,新建文件夹logs的地方。
6.监听客户端连接的端口。
下面就是启动注册中心了:你可以通过命令窗口的形式启动,也可以找到解压的zookeeper,E:\DubboxService\zookeeper\bin,双击zkServer.cmd即可启动注册中心。
3.2.监控中心搭建(Monitor)
关于监控中心,LZ这里给到的是dubbo-admin-2.5.4.war,这仅仅是个war包,还需要部署服务器。首先找一个tomcat服务器,把此war包拷贝到tomcat目录\webapps\ 下。 其次,将dubbo-2.5.3.jar文件拷贝到tomcat目录\lib\ 下。双击startup.bat启动tomcat。
启动tomcat之后,我们找到此目录下:E:\DubboxService\tomcat_dubbox_admin_service\webapps\ROOT\WEB-INF,如图:
打开dubbo.properties配置文件,如图:
第一行:ip地址即为我们启动注册中在哪个地方的ip地址,注册中心默认端口号2181,当然你一台机器上起两个注册中心,那么另外一个注册中心的端口号就可以改为2182等。既然是监控中心,言外之意就是要知道注册中心在哪里,我去监控谁,这里的ip就告诉你了,你要去监控谁。
第二行与第三行:我前面说过,这个监控中心中有很多可视化的管理功能,需要用户名和密码登录方可,这两行就是设置不同权限的密码。
注意:在这里提醒一下大家,要先启动注册中心,然后在启动监控中心。
在浏览器中输入localhost:8088(这个端口号是自己修改的,因为LZ的tomcat较多,有时候同时启动好几个tomcat,为避免冲突,故该之)如图:
输入用户名及密码,这里的用户名及密码,是我们前面提到过的。如图:
至此,监控中心以搭建完成。
3.3.客户端搭建(Consumer)
客户端以LZ实际的项目为例,以freight-enquiry-rest为客户端为例:
首先:maven依赖Dubbo框架所需要的jar包:如图pom文件中添加:
其次:在工程的配置中添加Dubbo客户端的配置文件:
下面LZ来解释一下下图该配置文件:
1.添加Dubbo的命名空间及约束规则,但是这个dubbo.xsd网上仓库下载不到,需要自己网上下载dubbo.xsd文件,然后手动加到eclipse中。如果不这样,下面用到的属性标签就会找不到,会报错。下面是添加dubbo.xsd的过程:
图上标注的地方,相信广大博友都能看的懂。LZ建议,这个xsd文件放到一个何时的位置保存,以备后续用到。
2.分析该配置项:
Application你自己定义的名字。
Address注册中心的地址(这个地址LZ的项目是统一管理的,放在diamond服务器上)。
Check是否检查服务端是否存在。
Id调用的接口名。
Interface接口的全类名。
Reggroup 默认是dubbo,环境隔离属性。
最后,客户端的配置基本都以完成。
3.4.服务端搭建(Provider)
服务端以LZ实际的项目为例,以efcl-enquiry-ds为服务端为例:在这里不多说,基本上类似客户端的搭建步骤一样,只是服务端的配置信息与客户端的配置信息不同。LZ在这里只提供截图。(算我偷懒了)
pom文件:
工程目录结构:
服务端配置文件内容:
最后说一下:最后一行中的ref是该接口的具体实现类,就是spring容器中的bean的id。
3.5.说在最后
相信广大博友发现,LZ这里提到的服务端和客户端的配置文件中,像这种"${dubbo.address}"取值的地方,可能不解。前面也提到过,这是LZ本人实际项目把配置统一管理的效果。
配置信息统一管理之Diamond服务:
本地服务加载配置信息:
所以这样以来,我刚才的服务端与客户端的配置文件中,这样就可以取到值了。
客户端调用:
-------------------------------------------------------------------------------------------------------------------------
LZ现在对dubbo的使用只是冰山一角,DUBBO有非常丰富的配置标签属性,如果后续有兴趣可以去查阅这两个网址:
DUBBO的使用场景,优势等
http://www.iteye.com/magazines/103
DUBBO的使用官网