dubbo zookeeper入门案例 + docker分布式部署

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地址 依据各人所定):

调用成功后如下图所示:



©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页