一.zookeeper与dubbo的使用

zookeeper与dubbo的使用

零.前言

按照计划,本月开始学习总结分布式和集群的相关知识点。公司所在项目使用的分布式是基于zookeeper和dubbo,就以它们为例进行总结,zookeeper是对分布式服务进行协调的应用,dubbo是分布式服务框架。学习理论枯燥且难以直观理解,本篇只讲使用,续文再讲原理。

一.zookeeper安装

二.dubbo安装

三.dubbo server端

四.dubbo client端

五.总结

正文:

一.zookeeper安装

1.1 下载Vmware,上面安装一个linux系统,从公司FTP中找到了Centos6.7,就直接拿来使用了。先查看有没有已安装的JDK

yum list installed | grep jdk

发现没有已经安装的JDK,那就进行安装(安装jdk8)

yum -y install java-1.8.0-openjdk*

然后查看是否被安装以及可执行路径
一.zookeeper与dubbo的使用_第1张图片
安装tomcat8,下载apache-tomcat-8.5.8.tar.gz  

tar -zxvf -C 解压即可

1.2 下载最新版zookeeper-3.4.9.tar.gz,解压后进入conf目录,将zoo_sample.cfg重命名为zoo.cfg。

查看zoo.cfg的配置,这个时候还没有server的配置;先不做任何修改

一.zookeeper与dubbo的使用_第2张图片

修改环境变量,将zookeeper添加进去。

vim /etc/profile
在末尾添加:
export PATH="$PATH:/usr/local/soft/zookeeper-3.4.9/bin"
重启虚拟机,执行


通过zkServer.sh status查看状态,会发现是standalone状态,说明这个时候还没有进行集群;另外我们可以在/root/zookeeper.out中看到启动的日志

1.3 zookeeper集群

1.3.1 再克隆出两台虚拟机,三台机器的ip这个时候分别为:

192.168.13.118
192.168.13.120
192.168.13.121
1.3.2  接着再每个虚拟机上编辑域名映射信息
vim /etc/hosts
添加下面内容
192.168.13.118  zk1
192.168.13.120  zk2
192.168.13.121  zk3
这样三台机器的域名分别为zk1,zk2,zk3;这样我们可以互相ping通

1.3.3启动zookeeper,并且查看状态


为什么会启动失败呢,查找下原来是防火墙的问题,关闭防火墙

chkconfig iptables off 

重启三台虚拟机,并且分别运行zookeeper,这个时候再查看状态,两个是follewer,一个leader(保持这三个服务开启,后面会用到)


二.dubbo安装

2.1 dubbo-admin  dubbo控制台安装  下载dubbo-admin-2.5.4.war

unzip -d 解压后,直接放在tomcat的webapps目录下,并把该目录下其他文件删除:


然后修改dubbo-admin-2.5.4/WEB-INF下的dubbo.properties配置,如zk1的地址是192.168.13.118

dubbo.registry.address=zookeeper://192.168.13.118:2181
dubbo.admin.root.password=root
dubbo.admin.guest.password=guest
接着就可以在浏览器里访问控制台了

一.zookeeper与dubbo的使用_第3张图片

2.2 dubbo-monitor  dubbo监控中心安装  下载dubbo-monitor-simple-2.5.4.tar.gz

tar -zxvf -C解压后,编辑dubbo-monitor-simple/dubbo-monitor-simple-2.5.4-SNAPSHOT/conf下的dubbo.properties文件:


dubbo-monitor采用jetty启动,这里的jetty的端口注意不要和上面的dubbo-admin的tomcat端口冲突,dubbo-admin采用的是8080,这里jetty就使用8180好了。

bin/start.sh启动后,在浏览器里访问

一.zookeeper与dubbo的使用_第4张图片
现在我们已经安装好了监控中心和控制台,那么它们有什么区别,看起来功能很相似?

区别是控制台可以提供服务治理的功能, 即可以修改服务的状态。

三.dubbo server端

概述:在两个应用之间进行接口的调用时(称之为RPC),我们可以使用传统的httpClient;其实还可以使用dubbo,它的工作机制是服务提供者(被调用者)把服务注册到dubbo,然后调用者从dubbo中获取服务,这样就完成了一次调用。 现在就解决了什么是dubbo的问题,即以区分httpClient的方式提供和调用服务。那为什么要使用dubbo?因为dubbo在应用之间提供和使用服务的时候,没有了地址的概念,而是换成了服务名,这样一方面省却了变化地址的问题,另一个方面也省却了增加或者减少地址的麻烦,因为对于dubbo来说,只需要增或减相关的服务即可。 下面就来介绍dubbo的使用

3.1 如何使用dubbo?

要想实现dubboServer和dubboClient之间完成调用,首先服务端和客户端需要一个接口来公用。可以有两种方式

1) 接口写在一个应用中,服务端和客户端都对这个应用进行引用

2) 更多的时候,两个应用是不太可能引用同一个应用。这个时候应该把接口以jar包的形式给Server和Client共同使用

然后,Server对jar包中的接口进行实现,并且向dubbo进行注册,而Client端调用jar包中的接口中的方法名,dubbo会去自动的寻找这个由Server端注册的方法的实现,本文就以jar包为例。

3.2 新建一个接口,然后打成jar包

package com.mycompany;

public interface dubboService {

	public String getString(String test);
	
}
一.zookeeper与dubbo的使用_第5张图片

3.3 然后建一个项目,用来做Server端;这个项目就采用之前搭建的一个项目http://download.csdn.net/detail/jintao_ma/9661038  这个项目采用的是JDK8,另外每次maven update或者install的时候,BuildPath都会采用Execution environment,我们需要修改其中的jdk版本:

一.zookeeper与dubbo的使用_第6张图片

另外还有一个问题是,如果maven install出现javax-servlet不存在(说明jdk配置还是稍微有点问题,因为javax-servlet在jdk中自带),那干脆就直接在pom中新增javax-servlet的依赖吧。

3.4 详细步骤

在pom中添加dubbo和zookeeper相关依赖:


	
	 	com.alibaba
		dubbo
		2.5.3
		

			
				org.springframework
				spring
			
		
	
	  
        org.apache.zookeeper  
        zookeeper  
        3.4.9  
    

	
	  com.github.sgroschupf
	  zkclient
	  0.1
	

由于dubbo内置的spring版本是2.5,低于我们使用的最新版4.3  所有把内置的spring排除注意添加完成后,maven update,然后再maven clean,maven install

导入jar包,然后写实现类:

package com.mycompany.dubboServer;

import org.springframework.stereotype.Service;

import com.mycompany.dubboService;
@Service("dubboService")
public class dubboServerImpl implements dubboService{

	public String getString(String arg0) {
		return arg0+"Dubbo";
	}

}

新建spring-dubbo.xml:


   










web.xml中配置:


		contextConfigLocation
		classpath:spring.xml,
		classpath:springDubbo.xml,
		classpath:springQuartz.xml
		
接着project-clean下,用tomcat8启动即可。由于这个时候那三台虚拟机还开着,所以我们就可以在监控中心和控制台中看到服务提供者: 一.zookeeper与dubbo的使用_第7张图片

注:如果在启动的时候报刚才的jar包找不到对应的类,那就设置下编译路径:一.zookeeper与dubbo的使用_第8张图片

还有运行时路径:

一.zookeeper与dubbo的使用_第9张图片
这样设置好了之后,除非在pom中新增依赖,否则就不要随便maven install了,不然路径的设置会被破坏,还要重新设置。

四.dubboClient端

配置和Server端基本相同,下面是几个不同:

4.1 新建一个完全一样的项目,更改项目名,导入jar包,新建一个消费服务的类:

一.zookeeper与dubbo的使用_第10张图片

package com.mycompany.dubboClient;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.mycompany.dubboService;

@Service("dubboClientTest")
public class dubboClientTest{

	@Autowired
	private dubboService dubboService;
	
	public void test(){
		System.out.println("dubboClientTest.test():"+dubboService.getString("Client"));
	}
}
4.2 spring-dubbo.xml少量不同:

   











4.3 准备使用定时器来执行Client端,在spring-Quartz.xml中增加配置:一.zookeeper与dubbo的使用_第11张图片

4.4 配置一个新的tomcat8,修改端口号和上面那个tomcat8不同即可:

然后启动,我们可以在Client端的Console看到每隔一分钟就会打印信息,并且控制台出现了消费者:



五.总结

先看一下服务类和消费类在项目中位置:

一.zookeeper与dubbo的使用_第12张图片一.zookeeper与dubbo的使用_第13张图片

到此基本上就已经结束了,只是明白了dubbo最基本的使用,即应用之间的rpc调用,服务提供者和使用者;关于原理等其他内容,后面再进行学习。

你可能感兴趣的:(zookeeper&dubbo)