天天看點

Dubbo初體驗:遠端服務調用和管控台的搭建

Dubbo初體驗:遠端服務調用和管控台的搭建
Dubbo是一個阿裡巴巴的分布式服務架構。雖然在很久以前阿裡停止更新了,但是還是有很多公司在使用它。Dubbo緻力于提供高性能和透明化的RPC遠端服務調用方案以及SOA服務治理方案。通過他我們可以非常容易地通過Dubbo來建構分布式服務。哦,對了。好像最近阿裡又開始更新了。

Dubbo的架構

Dubbo初體驗:遠端服務調用和管控台的搭建

調用關系說明:

  • 服務容器負責啟動,加載,運作服務提供者。
  • 服務提供者在啟動時,向注冊中心注冊自己提供的服務。
  • 服務消費者在啟動時,向注冊中心訂閱自己所需的服務。
  • 注冊中心傳回服務提供者位址清單給消費者,如果有變更,注冊中心将基于長連接配接推送變更資料給消費者。
  • 服務消費者,從提供者位址清單中,基于軟負載均衡算法,選一台提供者進行調用,如果調用失敗,再選另一台調用。
  • 服務消費者和提供者,在記憶體中累計調用次數和調用時間,定時每分鐘發送一次統計資料到監控中心。

    這張圖和這段話你可能已經見過無數次了,但是我還是把它從官網複制了過來。原因就是這張圖能很簡潔的說麼Dubbo的調用關系。如果你還沒有使用過Dubbo,那這張圖可以很快幫你理順調用關系。

Hello Dubbo

我們在使用過程中一般是采用XML配置,原因就是簡單友善。在使用之前我們需要搭建Dubbo的注冊中心。官方推薦的注冊中心是zookeeper。如果你還沒有搭建好zookeeper,那麼可以看看我之前寫的小白從頭到腳搭建zookeeper叢集的過程。

1.Dubbo依賴

如果你使用的是Maven項目,在使用Dubbo的地方加入下面的依賴即可:

<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>dubbo</artifactId>
	<exclusions>
		<exclusion>
			<groupId>org.springframework</groupId>
			<artifactId>spring</artifactId>
		</exclusion>
		<exclusion>
			<groupId>org.jboss.netty</groupId>
			<artifactId>netty</artifactId>
		</exclusion>
	</exclusions>
</dependency>
<dependency>
	<groupId>org.apache.zookeeper</groupId>
	<artifactId>zookeeper</artifactId>
</dependency>
<dependency>
	<groupId>com.github.sgroschupf</groupId>
	<artifactId>zkclient</artifactId>
</dependency>
           

2.生産者

首先展示生産者的接口,很簡單的兩個方法。

public interface SampleService {

	String sayHello(String name);
	
}
           

生産者的實作類:

public class SampleServiceImpl implements SampleService {
	
	public String sayHello(String name) {
		return "Hello " + name;
	}

}
           

User類的話就是name、age、sex三個屬性。

接下來就是生産者的Spring配置:

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

	<!-- 具體的實作bean -->
	<bean id="sampleService" class="top.catalinali.sample.provider.impl.SampleServiceImpl" />

	<!-- 提供方應用資訊,用于計算依賴關系 -->
	<dubbo:application name="sample-provider" />

	<!-- 使用zookeeper注冊中心暴露服務位址 -->
	<dubbo:registry address="zookeeper://192.168.71.121:2181?backup=192.168.71.122:2181,192.168.71.123:2181" />

	<!-- 用dubbo協定在20880端口暴露服務 -->
	<dubbo:protocol name="dubbo" port="20880" />

	<!-- 聲明需要暴露的服務接口  寫操作可以設定retries=0 避免重複調用SOA服務 -->
	<dubbo:service retries="0" interface="top.catalinali.sample.provider.SampleService" ref="sampleService" />

</beans>
           

3.消費者

首先消費者需要一個跟生産一模一樣的接口類

public interface SampleService {

	String sayHello(String name);

}
           

消費者配置

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

	<!-- 消費方應用名,用于計算依賴關系,不是比對條件,不要與提供方一樣 -->
	<dubbo:application name="sample-consumer" />

	<dubbo:registry address="zookeeper://192.168.71.121:2181?backup=192.168.71.122:2181,192.168.71.123:2181" />

	<!-- 生成遠端服務代理,可以像使用本地bean一樣使用demoService 檢查級聯依賴關系 預設為true 當有依賴服務的時候,需要根據需求進行設定 -->
	<dubbo:reference id="sampleService" check="false"
		interface="top.catalinali.sample.provider.SampleService" />

</beans>
           

Dubbo啟動

首先我們先啟動生産者啟動:

public class Provider {

	public static void main(String[] args) throws Exception {
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
				new String[] { "sample-provider.xml" });
		context.start(); 
		System.in.read(); // 為保證服務一直開着,利用輸入流的阻塞來模拟
	}
}
           

啟動消費者

public class Consumer {

	public static void main(String[] args) throws Exception {
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
				new String[] { "sample-consumer.xml" });
		context.start();
			
		SampleService sampleService = (SampleService) context.getBean("sampleService");
		String hello = sampleService.sayHello("tom");
		System.out.println(hello);
		
		System.in.read();
	}

}
           

結果

Dubbo初體驗:遠端服務調用和管控台的搭建

項目結構圖

Dubbo初體驗:遠端服務調用和管控台的搭建

Dubbo的管控台

Dubbo管控台搭建其實很容易,我們隻需要一個在linux上的tomcat跑Dubbo即可,需要的環境:

  • apache-tomcat-7.0.29.tar.gz
  • dubbo-admin-2.5.4.war

1.安裝tomcat

使用

tar -zxvf apache-tomcat-7.0.29.tar.gz

解壓tar包

2.解壓dubbo的war包

使用

unzip dubbo-admin-2.5.3.war -d dubbo-admin

解壓dubbo-admin-2.5.4.war到tomcat目錄下的webapps下。如果提示無unzip指令,使用yum安裝

yum install -y unzip zip

此指令

注意:

如果zookeeper注冊中心不在此伺服器上,則需要打開dubbo-admin/WEB-INF/dubbo.properties檔案,将紅框改注冊中心的ip位址。

Dubbo初體驗:遠端服務調用和管控台的搭建

3.運作tomcat

①進入tomcat下的bin目錄下,執行

./startup.sh

腳本。

②使用

tail -f ../logs/catalina.out

檢視日志。

Dubbo初體驗:遠端服務調用和管控台的搭建

③進入*http://192.168.71.121:8080/dubbo-admin/*就可以看到管控台了(IP位址改成你的伺服器ip)

Dubbo初體驗:遠端服務調用和管控台的搭建

也可以看到我們剛才所運作的服務

Dubbo初體驗:遠端服務調用和管控台的搭建

本文作者: catalinaLi

本文連結: http://catalinali.top/2017/helloDubbo/

版權聲明: 原創文章,有問題請評論中留言。非商業轉載請注明作者及出處。

繼續閱讀