粗略的学完springcloud后由于公司的项目有用到一点dubbo,刚好手头上又有dubbo的学习资料,于是趁机相对系统的学了下duboo框架,今天开始记录下我的所学所悟;说来惭愧,今年之前,作为一个有差不多两年开发经验的程序员竟然连微服务都没听过,一方面自己对这方面的技术没有过多关注,另一方面我从事的公司业务都相对传统,一个ssh框架一台服务器基本足够满足业务需求了;而开始知道微服务这个概念是在我年初有跳槽的想法后,那时候开始关注这方面,才知道有什么服务治理框架springcloud和dubbo;接下来记录这次学习dubbo的详细笔记
一、Dubbo介绍
以下内容摘自dubbo官网:
dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现;
而在我目前这个水平的认知里,dubbo就是一款解决服务间通信的框架,他能让不在一台服务器的各个服务进行相互调用,对使用者来说就像调用本地方法一样,并为我们整合了智能容错和负载均衡,当某个服务不可用或是当某个服务新增时dubbo会自动发现并注册他们。dubbo还提供了管理控制台,我们可以很直观的看到当前注册中心的状态以及注册中心中注册的服务(包括服务的提供者和消费者),还可以对这些服务进行各种管理,包括服务动态配置,负载均衡,访问控制,权重管理等等;下面贴上dubbo官网的架构图:
由图可见,和springcloud一样,dubbo也有服务消费者、提供者以及注册中心的概念,只不过springcloud整合了eureka作为注册中心,而dubbo使用的注册中心由第三方提供;官网推荐使用 zooKeeper;dubbo架构里还提供了一个简单的Montior(监控中心),它能够实时监控服务间的调用情况,包括调用的次数,时间以及成功失败与否,需要注意的是如果monitor挂掉不会影响服务间的相互调用
二、Dubbo环境搭建(基于普通maven项目的搭建,后续会记录基于springboot的搭建)
接下来进行dubbo的环境搭建,根据架构图总结为以下几步:
(一)搭建zooKeeper注册中心(由于我的老爷机性能,不足以支撑VMware所以我只在Windows环境下搭建了)
(二)dubbo管理控制台的搭建
(三)监控中心的搭建
(四)开发服务提供者和消费者并让他们在启动时分别向注册中心注册和订阅服务
(五)进行服务间的调用并测试
(一)搭建zooKeeper注册中心
1、下载并解压zooKeeper(https://archive.apache.org/dist/zookeeper/zookeeper-3.4.13/)
2、conf目录下zoo_sample.cfg文件中的clientPort表示zooKeeper的端口号,dataDir的值表示临时数据存储的目录,可以在conf同级目录新建data文件夹,然后将dataDir的值设成data,即dataDir=../data
3、进入bin目录,如果这时候启动zkServer.cmd应该会报错,原因是zkEnv.cmd定义的zoo.cfg文件找不到,这时候有两种解决办法,一是进入/conf目录将zoo_sample.cfg复制一份改名为zoo.cfg;另一种方法是将bin目录下的zkEnv.cmd文件以记事本方式打开,将set ZOOCFG=%ZOOCFGDIR%zoo.cfg改为set ZOOCFG=%ZOOCFGDIR%zoo_sample.cfg;
4、这时候你可以双击或是使用命令行启动bin下的zkServer.cmd文件了,但是我试过的两次这时候还是报错的,错误如下图所示( JAVA_HOME is incorrectly set.):
这应该是JAVA_HOME配置出了问题,可以去zkEnv.cmd进行如下修改:将set JAVA_HOME=%JAVA_HOME:"=%改为set JAVA_HOME="C:Program FilesJavajdk1.8.0_181"(等号后面的值是对应的本地jdk路径),然后将所有用双引号括起来的JAVA_HOME外面的双引号去掉,然后重启zkServer.cmd就能成功启动zooKeeper了
二、dubbo管理控制台的搭建
1、在https://github.com/apache/incubator-dubbo-ops下载dubbo-admin项目,这里需要注意一点我直接进去的时候默认分支是develop,这个分支应该是各路大神正在开发的,我看每天都有跟新,但一开始我不知道啊,看到它的目录如下:
我想dubbo的管理控制台都做成前后端分离的了呀,这么高端!于是就给下载下来了,dubbo-admin-backend项目还好,是一个springboot项目,用maven打个包就运行起来了,但是dubbo-admin-frontend项目开始 我也是使用mvn打包,但打出了一个node文件夹,对nodejs我一点了解没有,后来通过该项目的README.md文件和百度才把他起起来,然后还很欣喜的认为启动成功了,于是按照控制台的提示打开了dubbo-admin-frontend项目的首页,结果如下:
各种英文啊,要知道我的概念里dubbo-admin的页面全是中文的啊(等下搭建成功上图就知道了),心里还在想难道是dubbo做的更新,于是启动了之前开发好的一个服务向注册中心进行注册然后看控制台有没有显示,结果是令我失望的,无论怎么刷新页面还是如上,啥都没有,尴尬的是页面右上角的设置,通知这些按钮点击都没有效果,反应迟钝的我才意识到这有可能只是个开发中的demo;难怪我百度dubbo-admin-frontend显示的信息极少啊,于是我才回过头来想这是为什么,从dubbo官网跳到github然后不死心的慢慢找不同,最后终于发现是我选错了分支,尴尬一笔(好奇不知道有没有和我一样的白痴小白啊,哈哈),当我在相同的地址切换到master分支的时候,我印象中的dubbo-addmin终于出现了,至此浪费了一上午时间的问题终于搞定了,只是好奇这个develops分支下面的是干嘛的,是在准备跟新dubbo-addmin做成前后端分离的项目吗?希望有知道的大神告知,谢谢
选对分支后的页面如下(然后直接下载即可):
2、下载下来后进行解压,进入dubbo-admin文件夹,打开windows的命令控制台(可直接在当前路径里输入cmd快速启动这样就不用一层层的切换到当前目录了),输入命令:mvn clean package -Dmaven.test.skip=true进行打包,打包成功后进入target文件夹,会看到dubbo-admin-0.0.1-SNAPSHOT.jar,同样使用cmd输入java -jar dubbo-admin-0.0.1-SNAPSHOT.jar运行该项目,这样一切正常的话就可以直接访问了(用户名密码默认都为root),访问成功页面如下:
需要注意的是,在使用mvn打包前最好进入dubbo-admin/src/main/resources下打开application.properties文件瞄一眼dubbo.registry.address的值是否是上面搭建的zooKeeper注册中心的地址,本机测试的话只要关注端口号与之前起的zooKeeper端口是否一致即可.可进入zookeeper-3.4.13/conf/zoo_sample.cfg文件查看zooKeeper的端口号
至此dubbo的管理控制台就搭建成功了,后续我们可以在这里查看服务的注册情况以及对服务的相应管理;
三、简单监控中心的搭建
1、代码下载地址和dubboadmin一样,都位于incubator-dubbo-ops下,只不过dubbo管理控制台是dubbo-admin项目,而监控中心对应的是dubbo-monitor-simple项目,流程其实都是差不多的,把对应的项目打包然后跑起来就好了;但需要注意的是,我们打包之前都要看一样对应的配置文件里面的注册中心地址是否正确以及自身的端口号,ubbo-monitor-simple的配置文件在incubator-dubbo-ops-masterdubbo-monitor-simplesrcmain esourcesconfdubbo.properties中;一般我们都在本地测试的话是不用修改的,因为默认的注册中心就是zookeeper://127.0.0.1:2181;端口号是8080
2、接下来就是跑这个监控中心了,进入dubbo-monitor-simple文件夹,使用maven进行打包并跳过单元测试,命令如下:mvn package -Dmaven.test.skip;打包成功后进入targer文件夹,解压dubbo-monitor-simple-2.0.0-assembly.tar.gz后会有一个dubbo-monitor-simple-2.0.0文件夹,进入dubbo-monitor-simple-2.0.0assembly.bin并运行start.bat,这样监控中心算是启动起来了,启动成功后访问localhost:8080页面如下:
至此,dubbo的监控中心也算是搭建好了,后续可以结合dubbo-admin完美监控服务的运行状态,包括接口的暴露、注册情况,以及他们之前的调用明细
时间关系这篇笔记到此为止,后续记录运用到dubbo的简单demo