一、什么是dubbo接口
“隨着互聯網的發展,網站應用的規模不斷擴大,常規的垂直應用架構已無法應對,分布式服務架構以及流動計算架構勢在必行,急需一個治理系統確保架構有條不紊的演進
單一應用架構
當網站流量很小時,只需一個應用,將所有功能都部署在一起,以減少部署節點和成本。此時,用於簡化增刪改查工作量的數據訪問框架(ORM)是關鍵。
垂直應用架構
當訪問量逐漸增大,單一應用增加機器帶來的加速度越來越小,將應用拆成互不相干的幾個應用,以提升效率。此時,用於加速前端頁面開發的Web框架(MVC)是關鍵。
分布式服務架構
當垂直應用越來越多,應用之間交互不可避免,將核心業務抽取出來,作為獨立的服務,逐漸形成穩定的服務中心,使前端應用能更快速的響應多變的市場需求。此時,用於提高業務復用及整合的分布式服務框架(RPC)是關鍵。
流動計算架構
當服務越來越多,容量的評估,小服務資源的浪費等問題逐漸顯現,此時需增加一個調度中心基於訪問壓力實時管理集群容量,提高集群利用率。此時,用於提高機器利用率的資源調度和治理中心(SOA)是關鍵。”
這是官方給出的架構演變圖

Dubbo 的誕生和 SOA 分布式架構的流行有着莫大的關系。SOA 面向服務的架構(Service Oriented Architecture),也就是把工程按照業務邏輯拆分成服務層、表現層兩個工程。服務層中包含業務邏輯,只需要對外提供服務即可。表現層只需要處理和頁面的交互,業務邏輯都是調用服務層的服務來實現。SOA架構中有兩個主要角色:服務提供者(Provider)和服務使用者(Consumer)。
三、Dubbo架構圖解析
Container是服務容器,Container負責啟動,加載,運行Provider,同時也監控Provider並發送統計給Monitor(監控)。
Consumer 是服務的消費者,在啟動時向注冊中心訂閱服務,在收到注冊中心的通知后在有需要調用的服務的情況向Provider請求服務。同時也需要將調用情況統計給Monitor。
Registry 是注冊中心,負責服務的發現和服務的推送。
Monitor監控服務的消費生產情況,並進行治理調度。
簡單來說打個比方:dubbo就是動物園的動物,zookeeper是動物園。如果游客想看動物的話那么就去動物園看。比如你要看老虎,那么動物園有你才能看到。換句話說我們把很多不同的dubbo(動物)放到zookeeper(動物園中)提供給我們游客進行觀賞。這個過程中三個關鍵:場所、供給者、消費者。
再說一個分布式的項目,server(消費)層與 service(供給)層被拆分了開來, 部署在不同的tomcat中, 我在server層需要調用 service層的接口,但是兩個運行在不同tomcat下的服務無法直接互調接口,那么就可以通過zookeeper和dubbo實現。就好比把動物放到動物園,我們要看了直接去動物園就行。而不能直接去動物生活的地方去看,會有性命安全之憂(比如你去看老虎)。
我們通過dubbo 建立service這個服務,並且到zookeeper上面注冊,填寫對應的zookeeper服務所在 的IP及端口號。
1、jmeter本身並不支持dubbo接口的測試,需要下載第三方插件,然后將jar包放入${JMETER_HOME}\lib\ext路徑下,重啟即可。
插件下載地址:jmeter-plugins-dubbo
六、Dubbo Sample
1、添加線程組
2、添加dubbo sample
點擊線程組-》添加-》sample-》dubbo sample
各參數說明如下:
Protocol:注冊協議,包括zookeeper、multicast、Redis、simple;
Address:注冊地址,dubbo服務的IP+Port:
Get Provider List:點擊這個之后注冊到zk,可以獲取到dubbo服務器上的所有提供者,可下拉選擇接口,方法自動填入。也會自動填入下面的Interface和Method
①、當使用zk,address填入zk地址,集群地址使用","分隔;
②、使用dubbo直連,address填寫直連地址和服務端口;
Timeout:請求超時時間,單位ms,根據dubbo具體配置填寫;
Version:版本,dubbo不同版本之間差異較大,不同版本之間不能互相調用,這里指定dubbo版本,是為了方便識別和說明;
Retries:異常重試次數(類似這種分布式服務通信框架,大多都有重試機制,是為了保證事務成功率);
Cluster:集群類型,包括failover、failfast、failsafe、failback、failking;
Group:組類型,如果有的話,根據配置填寫即可;
Connections:連接數,同上,根據配置填寫;
Async:服務處理類型,包括sync(同步)、async(異步),根據配置填寫;
Loadbalance:負載均衡策略,包括random(隨機)、roundrobin(輪詢)、leastactive(最少活躍數)、consistenthash(一致性哈希);
Interface:接口名(因為dubbo服務大多是開發根據規范自行命名的,因此這里需要填寫完整的接口名+包名);
Method:當前接口下的方法名,按照開發提供的API文檔填寫即可;
Args:接口參數,根據API文檔填寫,輸入對應的參數類型和值即可;
①、paramType:參數支持任何類型,包裝類直接使用java.lang
下的包裝類,小類型使用:int
、
float
、
shot
、
double
、
long
、
byte
、
boolean
、
char
,自定義類使用類完全名稱;
②、paramValue:基礎包裝類和基礎小類型直接使用值,例如:int為1,boolean為true等,自定義類與List
或者Map
等使用json格式數據;