最近在公司用到阿里的dubbo做RPC分布式服务化,记录一下项目服务环境搭建的一些过程,方便后来的同行可以少走些弯路,欢迎大家一起交流分享。

一、环境准备

6台机器如下:

同时调dubbo同一服务多版本 dubbo项目如何部署到多台机_tomcat

用到的软件如下:

jdk-7u79-linux-x64.rpm、zookeeper-3.3.6-2181、apache-tomcat-7.0.57.tar.gz、dubbo-admin.war。

说明:zookeeperA、zookeeperB、zookeeperC上都安装jdk-7u79-linux-x64.rpm和zookeeper-3.3.6-2181。

tomcat(dubbo-provider)、tomcat(dubbo-consumer)、tomcat(dubbo-admin) 上都安装jdk-7u79-linux-x64.rpm、apache-tomcat-7.0.57.tar.gz。

在tomcat(dubbo-provider)这台机器上部署web-provider服务化的接口。

在tomcat(dubbo-consumer)上部署web-consumer服务消费的项目。

dubbo-provider和dubbo-consumer都可以分别集群化部署,增强服务的安全性和健壮性等。

tomcat(dubbo-admin)  部署dubbo的管理后台dubbo-admin.war

========================================================================

二、zookeeper分布式集群安装配置

(zookeeper服务器最好是奇数个,因为选举时以过半数即通过)

在zookeeperA上操作:

# cd zookeeper-3.3.6-2181/conf
# mv zoo_sample.cfg  zoo.cfg
# vi zoo.cfg

修改配置为如下:

同时调dubbo同一服务多版本 dubbo项目如何部署到多台机_同时调dubbo同一服务多版本_02

其中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文件值分别为104、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

如下:

同时调dubbo同一服务多版本 dubbo项目如何部署到多台机_tomcat_03

同时调dubbo同一服务多版本 dubbo项目如何部署到多台机_zookeeper_04

同时调dubbo同一服务多版本 dubbo项目如何部署到多台机_zookeeper_05

同时调dubbo同一服务多版本 dubbo项目如何部署到多台机_zookeeper_06

========================================================================

三、dubbo-provider服务提供者

这里的provider是用springmvc+spring+mybatis+mysql搭建的项目,spring中整合了dubbo,项目结构如下:

同时调dubbo同一服务多版本 dubbo项目如何部署到多台机_spring_07

注:一定要把服务提供方的需要暴露的接口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>

========================================================================

四、dubbo-consumer服务消费者

这里的consumer也是用springmvc+spring+mybatis+mysql搭建的项目,spring中整合了dubbo,项目结构如下:

同时调dubbo同一服务多版本 dubbo项目如何部署到多台机_spring_08

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远程过程调用。

========================================================================

五、dubbo-admin服务管理后台

下载dubbo-admin,

直接解压并修改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管理后台的账号密码即可登录如下:

同时调dubbo同一服务多版本 dubbo项目如何部署到多台机_tomcat_09

同时调dubbo同一服务多版本 dubbo项目如何部署到多台机_同时调dubbo同一服务多版本_10

可以看到刚刚部署上去的provider和consumer两个项目,这个控制台可以做好些监控和管理。

========================================================================

六、项目测试

可以看到consumer直接调用provider的远程方法,可以成功返回数据。后面要扩展暴露多个服务可以直接在dubbo.xml配置文件里面配置,同时要调用多个服务也一样在consumer的dubbo.xml里面配置即可像本地方法一样调用远程方法。另外,provider和consumer可以分别做集群部署,提高可靠性和可用性。

同时调dubbo同一服务多版本 dubbo项目如何部署到多台机_spring_11