Dubbox
Dubbox简介:
Dubbox 是一个分布式服务框架,其前身是阿里巴巴的开源项目,后期阿里巴巴停止了该项目的维护,当当网便在Dubbo基础上进行维护,为了与原有的Dubbo区分,故将其命名为Dubbox。
Dubbox 致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbox就是个分布式服务框架,如果没有分布式的需求,其实是不需要用的。
Apache提供了一个注册仓库(并推荐使用)ZooKeeper
针对以上图的个人理解:
分布式分为客户端和服务端,左侧为客户端,右侧则为服务端,当启动项目时则应先搭建好ZooKeeper服务器,然后启动服务端,当服务端启动完毕后,则可启用客户端。
当服务端启动完毕,会将服务注册到注册仓库中,客户端若需要去调用服务,则直接询问注册仓库中,被注册服务的地址。
实际上:客户端和服务端就是通过service层连接,所以服务端不需要controller层,但是客户端需要从服务端获取service层的接口,通过注解 @Reference,引用注入。
缺点:依赖于service,不管是客户端或者服务端都需要接口的代码,且保证两边功能一样
解决办法:将相互依赖的层分成单独的模块,打包成jar然后导入到对应需要依赖的地方去,
注意:各个模块之间耦合性较高,并且难以维护
例如:
可以把service的接口拆分出来,单独建一个模块打包成jar,让这个模块导入服务层,并且导入controller层
可以把实体类单独建立一个模块打包成jar,因为实体类会在service层中使用,所以,服务层和controller层甚至dao层都需要引用
通过配置实现他们之间的关联性(pom.xml),则无需手动导入
注意:服务器端的service层实现类需要加(由dubbo提供的)注解 @Service
com.alibaba.dubbo.config.annotation.Service;
不要与Spring提供的注解混淆
org.springframework.stereotype.Service;
服务端注册服务:
<!--服务器名 -->
<dubbo:application name="dubboxdemo-service"/>
<!-- zookeeper 服务器所在地址 -->
<dubbo:registry address="zookeeper://192.168.25.128:2181"/>
<!-- 扫描service实现层的包-->
<dubbo:annotation package="com.bdqn.service.impl"/>
客户端获取服务:
<!--服务器名 -->
<dubbo:application name="dubboxdemo-web"/>
<!-- zookeeper 服务器所在地址 -->
<dubbo:registry address="zookeeper://192.168.25.128:2181"/>
<!-- 扫描Controller层包-->
<dubbo:annotation package="com.bdqn.controller"/>
管理中心的部署
安装
(1)编译源码,得到war包
下载dubbox-master.zip解压出来后打开dubbo-admin,在这个mul 下运行cmd,执行maven命令:(-Dmaven.skip.test=true 跳过测试)
mvn package -Dmaven.skip.test=true
(2)进入target文件夹,你会看到一个dubbo-admin-x.x.x.war , 在linux服务器上安装tomcat, 将此war包上传到linux服务器的tomcat的webapps下。为了访问方便,你可以把版本号去掉。 启动tomcat后自动解压。
(3)如果你部署在zookeeper同一台主机并且端口是默认的2181,则无需修改任何配置。如果不是在一台主机上或端口被修改,需要修改WEB-INF下的dubbo.properties ,修改如下配置:
dubbo.registry.address=zookeeper://127.0.0.1:2181
修改后重新启动tomcat
测试:访问该项目,输入用户名root,密码root则可以访问