传统工程做多了,许多人也对分布式产生兴趣了。
本篇文章使用dubbo zookeeper Struts2 spring mybatis来做一个例子。
现暂时配置单节点,相对会比较简单。集群后期小编有空会补上!
先看一下dubbo架构图:
节点角色说明:
Provider: 暴露服务的服务提供方。
Consumer: 调用远程服务的服务消费方。
Registry: 服务注册与发现的注册中心。
Monitor: 统计服务的调用次调和调用时间的监控中心。
Container: 服务运行容器。
zookeeper 图
使用dubbo需要建立服务注册中心,建议使用dubbo-2.3.3以上版本的zookeeper注册中心客户端。Zookeeper是Apache Hadoop的子项目,强度相对较好,建议生产环境使用该注册中心。Dubbo未对Zookeeper服务器端做任何侵入修改,只需安装原生的Zookeeper服务器即可,所有注册中心逻辑适配都在调用Zookeeper客户端时完成。
概念上的东西,这里不一一讲解,简单摸清概念之后即可开始了。
这里只使用一台服务器,以下出现的IP 192.168.137.140 是我服务器的地址。
一.虚拟机安装zookeeper注册中心
1.解压zookeeper安装包:
tar -zxvf zookeeper-3.4.6.tar.gz
2.在zookeeper-3.4.6目录下创建以下目录:
mkdir data
mkdir logs
3.将 zookeeper-3.4.6/conf 目录下的 zoo_sample.cfg 文件拷贝一份,命名为zoo.cfg
cp zoo_sample.cfg zoo.cfg
4.修改zoo.cfg配置文件:
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/usr/zookeeper/zookeeper-3.4.6/data
dataLogDir=/usr/zookeeper/zookeeper-3.4.6/logs
# the port at which the clients will connect
clientPort=2181
#2888,3888 are election port
server.1=duzoo:2888:3888
其中,
2888端口号是 zookeeper服务之间通信的端口。
3888是zookeeper与其他应用程序通信的端口。
5.在dataDir=/usr/zookeeper-3.4.6/data 下创建myid文件
编辑myid文件,并在对应的 IP的机器上输入对应的编号。如在zookeeper 上, myid
文件内容就是 1。如果只在单点上进行安装配置,那么只有一个server.1
vi myid
1
6.配置环境变量:
export ZOOKEEPER_HOME=/usr/zookeeper/zookeeper-3.4.6
export PATH=ZOOKEEPER_HOME/bin:PATH
使配置文件生效
source /etc/profile
7.在防火墙中打开要用到的端口2181、2888、3888
vi /etc/sysconfig/iptables
增加以下 3 行:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2181 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2888 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3888 -j ACCEPT
重启防火墙:
# service iptables restart
8.启动并测试 zookeeper,在/usr/zookeeper/zookeeper-3.4.6/bin目录中执行:
./zkServer.sh
9.使用jps可查看进程
3525 QuorumPeerMain
3643 Jps
其中,QuorumPeerMain是 zookeeper进程,启动正常
查看状态:
zkServer.sh status
10.停止zookeeper 进程
zkServer.sh stop
11.配置zookeeper开机启动
编辑/etc/rc.local文件,加入:
su - wusc -c '/usr/zookeeper/zookeeper-3.4.6/bin/zkServer.sh start'
二、安装 Dubbo管理控制台
- 安装tomcat 解压: tar -zxvf apache-tomcat-7.0.42.tar.gz 重命名:mv apache-tomcat-7.0.42 dubbo-admin-tomcat
- 移除/usr/dubbo/dubbo-admin-tomcat 下webapps下的所有文件 rm -rf *
3、 上传Dubbo管理控制台程序 dubbo-admin-2.5.3.war
到/usr/dubbo/dubbo-admin-tomcat/webapps
4.解压并把目录命名为ROOT:
unzip dubbo-admin-2.5.3.war -d ROOT
5.配置dubbo.properties:
vi ROOT/WEB-INF/dubbo.properties
dubbo.registry.address=zookeeper://192.168.137.140:2181
dubbo.admin.root.password=duzoo.123
dubbo.admin.guest.password=duzoo.123
稍后需要用此密码登录控制台
6. 防火墙开启8080端口
vi /etc/sysconfig/iptables
增加:
## dubbo-admin-tomcat:8080
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
重启防火墙:
# service iptables restart
7.启动tomcat
在tomcat的bin目录下执行
./startup.sh
最后查看进程jps
多了Bootstrap,这个就是tomcat的进程
浏览http://192.168.137.140:8080/ ,根据配置这里登录账号密码为:root,123
控制台安装完成!
三、配置服务
框架整合这里就不说了,不唠叨太多了。
这是我的工程目录:
提供接口的例子很简单。
这里我把提供服务与消费服务放在同个工程中,这样的做法其实是不可取的,主要是为了体现出提供服务。最好使用maven分包,服务为服务,消费为消费。分布式服务会把工程划分的很细,如共有逻辑模块为一个工程,配置信息为一个工程,接口服务为一个工程等等,出现依赖关系等等,而maven很擅长于做这种事。
spring文件
服务接口:
服务实现:
注册服务,在dubbo-provider文件:
${dubbo.registry.address}为注册的地址,在service.properties中配置
使用ClassPathXmlApplicationContext启动
注意,启动的是提供服务端
启动之后访问控制台,可看到服务已经注册上去了
配置消费端
消费端这里用tomcat启动,在web.xml文件中配置
这里启动的是消费的一端
启动成功后通过web层调用注册在zookeeper上的接口
成功调用后再刷新一下控制台,即可看到消费端
至此,提供服务与消费服务即可使用。
这里主要说明dubbo与zookeeper结合提供以及消费服务,真正情况下还是用maven构建的。
有兴趣的同学可以把服务与消费使用打包到服务器下运行,即服务打成可执行jar包,在服务器运行。消费打包成war包,放到服务器下运行。
四、安装简易监控中心
- 解压dubbo-monitor-simple-2.5.3-assembly.tar.gz
- 修改配置文件dubbo.properties
dubbo监控中心的端口为7070
3.修改防火墙,开启所需端口
vi /etc/sysconfig/iptables
增加以下 2 行:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 7070-j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8090-j ACCEPT
重启防火墙:
# service iptables restart
到bin目录下开启监控中心
./start.sh
访问http://192.168.137.140:8090/
访问成功,可以在监控中心里看到服务与消费的信息。
本篇文章边实验边编写,花了不少时间,有些地方不足请见谅!