dubbo zookeeper入门案例 + docker分布式部署
一. 说明
微服务框架也是近几年比较热门的话题,其优点很明显,通过分解巨大单体式应用为多个服务方法解决了复杂性问题,每个微服务相对较小,每个微服务独立的开发,部署,便于团队开发,开发团队可以自由选择开发技术。部署改善故障隔离。一个服务宕机不会影响其他的服务。本篇记录一下,dubbo zookeeper的入门案例。
二. dubbo zookeeper入门案例:
1. 案例介绍:
本案例(SSH框架基础上改写而来的,使用mvc分层)共由两部分组成,一部分是dubboWeb项目,主要是controller层以及页面,js等,另外一个项目是dubboSer项目,主要提供service,dao层。dubboWeb通过dubbo中rpc方式调用dubboSer项目,从而提供服务。
项目如图所示:
2. 普通的maven项目改成dubbo微服务架构的项目,主要改动在以下几处:
(1). pom需要加上dubbo依赖:
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.18.1-GA</version>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.9</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.8</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.7</version>
<exclusions>
<exclusion>
<artifactId>spring</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
(2) dubbo提供者(提供service服务的项目),需要加上dubbo的配置dubbo-provider.xml,如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="dubboSer-C" />
<!-- 使用zookeeper注册中心暴露服务地址 -->
<dubbo:registry address="zookeeper://192.168.1.137:2181" />
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" />
<!-- 声明需要暴露的服务接口 -->
<dubbo:service interface="cn.nuohy.service.IUserService" ref="userService" />
<!-- 具体的实现bean -->
<bean id="userService" class="cn.nuohy.service.impl.UserServiceImpl" />
</beans>
注:在spring配置中引入进来:
applicationContext.xml中加入 <import resource="classpath*:/dubbo-provider.xml" />
(3)消费者(提供control服务的项目),需要加上dubbo-web.xml,如下:
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
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-4.0.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="dubboWeb-C" />
<!-- 使用zookeeper注册中心暴露服务地址 -->
<dubbo:registry address="zookeeper://192.168.1.137:2181" />
<!-- dubbo 用注解注入 -->
<dubbo:annotation package="cn.nuohy.control" />
</beans>
注:在spring配置中引入进来:
applicationContext.xml中加入 <import resource="dubbo-web.xml" />
(4)control层调用时,service注入的改动,也就是Interface上注解的变动,如下:
3. zookeeper的使用:
我下载的是:zookeeper-3.5.2-alpha.tar.gz
解压后得到以下文件:
进入bin文件夹中,双击运行 zkServer.cmd ,即可开启zookeeper。
4. 再依次运行 dubboSer,dubboWeb项目
5. Dubbo-admin管理平台的搭建
(2)按照github上的操作:
可以生成:dubbo-admin-2.0.0.war
(3)将改war包拷贝至一个tomcat中(改tomcat要在zookeeper的机器上,这样该项目就不用改了)
(4)运行tomcat后,访问(ip地址与端口号根据各人而定):
用户名 与 密码均为 root
进入系统后台后,如图所示:
我们可以看到提供者 与 消费者:
通过该系统可以调节各个服务的负载。
三. 将应用部署至Docker容器中
准备工作:需要将dubboSer,dubboWeb通过maven 打成war包(命令:mvn install)
1. Docker容器介绍:
Docker从形象上说与虚拟机类似,但是差异还是很大的,
vm通过Hypervisor对硬件资源进行虚拟化,而docker直接使用硬件资源,从这方面看来,docker对资源的利用率更高
2. Docker容器安装:
(1) windows安装:
github上的Boot2Docker
注: windows 10中Docker与其他windwos版本不同
非win10版本安装
Docker Toolbox
(2)ubuntu安装
执行命令: apt-get install docker.io
3. Docker部署tomcat:
# 查找tomcat的信息
docker search tomcat
# 下载官方的镜像Starts最高的
docker pull docker.io
/tomcat
# 查看docker所有的镜像
docker images
部署dubboSer,执行:
docker run -d
-v /media/root/A/develop/JAVA/tool/tomcat/tomcat-Ser-A/webapps/dubboSer-A
:/usr/local
/tomcat/webapps/dubboSer-A -p
9094
:
8080
docker.
io/tomcat
命令解释:
(1) /media/root/A/develop/JAVA/tool/tomcat/tomcat-Ser-A/webapps/dubboSer-A 是宿主机(安装docker的那台机器)上dubboWeb放置的路径,也就是dubboSer项目打成war包后,解压的那个文件夹路径
(2)
/usr/local
/tomcat/webapps/dubboSer-A,是容器中tomcat内项目存放的位置
(3) 9094是容器对外暴露的端口,8080是指容器对外的端口映射到容器内的某个端口
(4) docker.io/tomcat 是ubuntu中 tomcat的镜像名
部署dubboWeb,执行:
docker run -d
-v /media/root/A/develop/JAVA/tool/tomcat/tomcat-Web-A/webapps/dubboWeb
:/usr/local
/tomcat/webapps/dubboWeb-A -p
9093
:
8080
docker.
io/tomcat
附上一些docker常用的指令:
# 查看所有镜像
docker images
# 创建镜像
docker commit 26cc11b251f0 mytomcat:1.0
# 移除镜像
docker rmi -f ab7958460b8c
# 正在运行容器
docker ps
# 查看docker容器
docker ps -a
# 启动tomcat:7镜像
docker run -p 8080:8080 tomcat:7
# 以后台守护进程的方式启动
docker run -d tomcat:7
# 停止一个容器
docker stop b840db1d182b
# 进入一个容器
docker attach d48b21a7e439
# 进入正在运行容器并以命令行交互
docker exec -it e9410ee182bd /bin/sh
# 以交互的方式运行
docker run -i -t -p 8081:8080 tomcat:7 /bin/bash
# 移除容器
docker rm 容器Id
四. 测试案例简单说明
源码下载地址:
该项目需要mysql数据库,数据库名为dubboA,运行项目后会自动创建user表,手动向表中添加一条数据,如:
通过以上步骤搭建好之后,访问的地址为(IP地址 依据各人所定):
调用成功后如下图所示: