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/
版權聲明: 原創文章,有問題請評論中留言。非商業轉載請註明作者及出處。