最近在公司用到阿里的dubbo作RPC分布式服务化,记录一下项目服务环境搭建的一些过程,方便后来的同行能够少走些弯路,欢迎你们一块儿交流分享。java
1、环境准备mysql
6台机器以下:linux
用到的软件以下:web
jdk-7u79-linux-x64.rpm、zookeeper-3.3.6-218一、apache-tomcat-7.0.57.tar.gz、dubbo-admin.war。spring
说明:zookeeperA、zookeeperB、zookeeperC上都安装jdk-7u79-linux-x64.rpm和zookeeper-3.3.6-2181。sql
tomcat(dubbo-provider)、tomcat(dubbo-consumer)、tomcat(dubbo-admin) 上都安装jdk-7u79-linux-x64.rpm、apache-tomcat-7.0.57.tar.gz。apache
在tomcat(dubbo-provider)这台机器上部署web-provider服务化的接口。浏览器
在tomcat(dubbo-consumer)上部署web-consumer服务消费的项目。tomcat
dubbo-provider和dubbo-consumer均可以分别集群化部署,加强服务的安全性和健壮性等。安全
tomcat(dubbo-admin) 部署dubbo的管理后台dubbo-admin.war
========================================================================
2、zookeeper分布式集群安装配置
(zookeeper服务器最好是奇数个,由于选举时以过半数即经过)
在zookeeperA上操做:
# cd zookeeper-3.3.6-2181/conf
# mv zoo_sample.cfg zoo.cfg
# vi zoo.cfg
修改配置为以下:
其中server.A=B:C:D的A是集群节点ID,B是机器IP或域名,C是节点数据交互端口,D是从新选举时用的选举端口。还有dataDir不能用相对地址,否则会致使zookeeper启动失败,并且dataDir对应的目录必须存在。
在zookeeper根目录下建立数据目录data
#mkdir ../data
在数据目录data下新建服务器id文件myid
# vi myid
写入服务器集群标识符号:103 并保存。
在zookeeperB、zookeeperC上作zookeeperA一样的操做,惟一不一样的是设置myid文件值分别为10四、105.
在zookeeperA、zookeeperB、zookeeperC上安装配置完后,分别启动zookeeper:
zookeeper经常使用命令:
./zkServer.sh start 启动zookeeper服务
./zkServer.sh stop 中止zookeeper服务
./zkServer.sh restart 重启zookeeper服务
./zkServer.sh status 查看zookeeper服务启动状态
./zkCli.sh -server ${leader_address}:2888 链接进入zookeeper客户端命令行,${leader_address}必须是leader
以下:
========================================================================
3、dubbo-provider服务提供者
这里的provider是用springmvc+spring+mybatis+mysql搭建的项目,spring中整合了dubbo,项目结构以下:
注:必定要把服务提供方的须要暴露的接口CountService.java单独打成jar包,导入到服务消费方。
dubbo关键依赖包:
spring依赖包,netty-3.2.10.Final.jar,dubbo-2.5.3.jar,javassist-3.9.0.GA.jar,zkclient-0.1.jar,zookeeper-3.4.6.jar
关键配置spring-provider.xml配置以下:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" 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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd" default-lazy-init="true"> <bean id="countService" class="com.web.service.impl.CountServiceImpl"/> <!--提供方应用名,用于计算依赖关系,不是匹配条件,不要与消费方同样 --> <dubbo:application name="${dubbo.name}"/> <!-- 使用multicast广播注册中心暴露发现服务地址 --> <dubbo:registry protocol="zookeeper" address="${dubbo.address}"/> <dubbo:protocol name="dubbo" port="2888" /> <!-- ============================对外暴露提供调用的服务 ==============================--> <dubbo:service interface="com.web.service.CountService" ref="countService" /> </beans>
========================================================================
4、dubbo-consumer服务消费者
这里的consumer也是用springmvc+spring+mybatis+mysql搭建的项目,spring中整合了dubbo,项目结构以下:
dubbo关键依赖包:
spring依赖包,netty-3.2.10.Final.jar,dubbo-2.5.3.jar,javassist-3.9.0.GA.jar,zkclient-0.1.jar,zookeeper-3.4.6.jar
关键配置spring-consumer.xml配置以下:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" 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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd" default-lazy-init="true"> <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方同样 --> <dubbo:application name="${dubbo.name}"/> <!-- 使用multicast广播注册中心暴露发现服务地址 --> <dubbo:registry protocol="zookeeper" address="${dubbo.address}"/> <!-- 生成远程服务代理,能够和本地bean同样使用demoService --> <!-- ============================begin User Module ==============================--> <dubbo:reference id="countService" interface="com.web.service.CountService" timeout="5000" check="false"/>
消费形式能够直接在控制层或服务层直接调用provider提供的远程方法,RPC远程过程调用。
========================================================================
5、dubbo-admin服务管理后台
下载dubbo-admin, http://download.csdn.net/detail/x1j2b3/9645686
直接解压并修改WEB-INF下的dubbo.properties为:
dubbo.registry.address=zookeeper://192.168.1.104:2181
dubbo.admin.root.password=root
dubbo.admin.guest.password=guest
重命名项目名为:ROOT,删除tomcat中webapp下默认的项目,把ROOT部署到tomcat,(注:tomcat8不兼容,只能是tomcat7或tomcat6).
而后在浏览器访问项目:http://192.168.1.107
在弹出框输入dubbo管理后台的帐号密码便可登陆以下:
能够看到刚刚部署上去的provider和consumer两个项目,这个控制台能够作好些监控和管理。
========================================================================
6、项目测试
能够看到consumer直接调用provider的远程方法,能够成功返回数据。后面要扩展暴露多个服务能够直接在dubbo.xml配置文件里面配置,同时要调用多个服务也同样在consumer的dubbo.xml里面配置便可像本地方法同样调用远程方法。另外,provider和consumer能够分别作集群部署,提升可靠性和可用性。