Dubbo是一個阿裡巴巴的分布式服務架構。雖然在很久以前阿裡停止更新了,但是還是有很多公司在使用它。Dubbo緻力于提供高性能和透明化的RPC遠端服務調用方案以及SOA服務治理方案。通過他我們可以非常容易地通過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管控台搭建其實很容易,我們隻需要一個在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位址。
3.運作tomcat
①進入tomcat下的bin目錄下,執行
./startup.sh
腳本。
②使用
tail -f ../logs/catalina.out
檢視日志。
③進入*http://192.168.71.121:8080/dubbo-admin/*就可以看到管控台了(IP位址改成你的伺服器ip)
也可以看到我們剛才所運作的服務
本文作者: catalinaLi
本文連結: http://catalinali.top/2017/helloDubbo/
版權聲明: 原創文章,有問題請評論中留言。非商業轉載請注明作者及出處。