一.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*

然後查看是否被安裝以及可執行路徑

安裝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添加進去。

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
接着就可以在瀏覽器裏訪問控制檯了

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啓動後,在瀏覽器裏訪問


現在我們已經安裝好了監控中心和控制檯,那麼它們有什麼區別,看起來功能很相似?

區別是控制檯可以提供服務治理的功能, 即可以修改服務的狀態。

三.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);
	
}

3.3 然後建一個項目,用來做Server端;這個項目就採用之前搭建的一個項目http://download.csdn.net/detail/jintao_ma/9661038  這個項目採用的是JDK8,另外每次maven update或者install的時候,BuildPath都會採用Execution environment,我們需要修改其中的jdk版本:


另外還有一個問題是,如果maven install出現javax-servlet不存在(說明jdk配置還是稍微有點問題,因爲javax-servlet在jdk中自帶),那乾脆就直接在pom中新增javax-servlet的依賴吧。

3.4 詳細步驟

在pom中添加dubbo和zookeeper相關依賴:

<!-- 配置dubbo和zookeeper -->
	<dependency>
	 	<groupId>com.alibaba</groupId>
		<artifactId>dubbo</artifactId>
		<version>2.5.3</version>
		<exclusions>
<!-- 屏蔽dubbo自帶的spring -->
			<exclusion>
				<groupId>org.springframework</groupId>
				<artifactId>spring</artifactId>
			</exclusion>
		</exclusions>
	</dependency>
	<dependency>  
        <groupId>org.apache.zookeeper</groupId>  
        <artifactId>zookeeper</artifactId>  
        <version>3.4.9</version>  
    </dependency>
<!-- 看看有沒有其他的zkclient -->
	<dependency>
	  <groupId>com.github.sgroschupf</groupId>
	  <artifactId>zkclient</artifactId>
	  <version>0.1</version>
	</dependency>

由於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:

<?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.3.xsd
        http://code.alibabatech.com/schema/dubbo
        http://code.alibabatech.com/schema/dubbo/dubbo.xsd">   

<!-- 指定註冊中心 -->
<dubbo:registry address="zookeeper://192.168.13.118:2181" check="false"/>
<!-- 配置當前應用信息 -->
<dubbo:application  name="myWebAppServer"/>
<!-- 服務提供方指定的端口 -->
<dubbo:protocol name="dubbo" port="20880" />
<!-- 提供服務者配置 -->
<dubbo:service  cluster="failsafe" ref="dubboService" interface="com.mycompany.dubboService" timeout="6000"  />

</beans>

web.xml中配置:

<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:spring.xml,
		classpath:springDubbo.xml,
		classpath:springQuartz.xml
		</param-value>
</context-param>
接着project-clean下,用tomcat8啓動即可。由於這個時候那三臺虛擬機還開着,所以我們就可以在監控中心和控制檯中看到服務提供者:

注:如果在啓動的時候報剛纔的jar包找不到對應的類,那就設置下編譯路徑:

還有運行時路徑:


這樣設置好了之後,除非在pom中新增依賴,否則就不要隨便maven install了,不然路徑的設置會被破壞,還要重新設置。

四.dubboClient端

配置和Server端基本相同,下面是幾個不同:

4.1 新建一個完全一樣的項目,更改項目名,導入jar包,新建一個消費服務的類:


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少量不同:
<?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.3.xsd
        http://code.alibabatech.com/schema/dubbo
        http://code.alibabatech.com/schema/dubbo/dubbo.xsd">   

<!-- 指定註冊中心 -->
<dubbo:registry address="zookeeper://192.168.13.118:2181" check="false"/>
<!-- 配置當前應用信息 -->
<dubbo:application  name="myWebAppClient"/>
<!-- 服務提供方指定的端口 -->
<dubbo:protocol name="dubbo" port="20880" />
<dubbo:consumer check="false" />
<!-- 提供服務者配置 -->
<dubbo:reference  cluster="failsafe"  id="dubboService" interface="com.mycompany.dubboService" timeout="6000" />

</beans>

4.3 準備使用定時器來執行Client端,在spring-Quartz.xml中增加配置:

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

然後啓動,我們可以在Client端的Console看到每隔一分鐘就會打印信息,並且控制檯出現了消費者:



五.總結

先看一下服務類和消費類在項目中位置:


到此基本上就已經結束了,只是明白了dubbo最基本的使用,即應用之間的rpc調用,服務提供者和使用者;關於原理等其他內容,後面再進行學習。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章