微服務-dubbo快速實踐1
微服務-dubbo快速實踐1:dubbo機制測試
完整程式碼下載連結:
https://github.com/2010yhh/springboot-dubbo.git
環境
idea2018,jdk1.8,springboot2.0.3.RELEASE,
dubbo1.0.0,工程基於spring-boot-starter-dubbo構建
1.springboot整合dubbo及配置
springboot整合dubbo配置:
1.application.properties 或者yaml檔案配置,
但是這種配置方式只能配置全域性的配置,介面級別的需要利用註解或者xml檔案進行配置
2.註解方式;
@Service 服務提供者常用配置,@Reference 服務消費者常用配置,服務端的配置是;其中消費端的介面配置優先順序>服務端的介面配置
3.xml配置檔案
和2註解方式類似。
本文的demo配置是在application.properties 配置常規項,利用@Service,@Reference配置介面級別的,
dubbo服務端application.properties示例:
# web服務埠號 server.port=8090 # dubbo服務端應用名稱 spring.dubbo.application.name=dubbo-service # dubbo協議 spring.dubbo.protocol.name=dubbo # 註冊中心地址 spring.dubbo.registry.address=zookeeper://127.0.0.1:2181 # duboo埠號 spring.dubbo.protocol.port=20880 # dubbo的介面實現包位置 spring.dubbo.scan=com.ctg.test.service.impl #負載均衡策略:random,roundrobin,leastactive spring.dubbo.loadbalance=roundrobin #以下幾項在服務介面的實現類中配置 #重試次數 #超時時間(ms)(服務端的超時配置是消費端的預設配置) #叢集容錯策略:failove,failfast,failsafe,failback,forking,broadcast
dubbo消費端application.properties示例:
# web服務埠號 server.port=8092 # dubbo服務端應用名稱 spring.dubbo.application.name=dubbo-client # dubbo協議 spring.dubbo.protocol.name=dubbo # 註冊中心地址 spring.dubbo.registry.address=zookeeper://127.0.0.1:2181 # duboo埠號 spring.dubbo.protocol.port=20882 #服務介面所在的位置,可以適當放大掃描包 spring.dubbo.scan=com.ctg.test
介面級別的配置
服務端:
@Service(version = "1.0.0",timeout =10000,retries = 1,cluster = "broadcast")
消費端:
@Reference(version = "1.0.0",mock = "true")
以下測試都是用zk做註冊中心。
1)demo工程目錄:
2)依次啟動zk,服務端,消費端,訪問測試介面
3)http://localhost:8092/test3?name=zyq
##
2.負載均衡
負載均衡測試:部署多個服務端(這裡可以修改application.properties中的server.port和spring.dubbo.protocol.port;然後直接啟動ProviderApplication2次),消費端請求。
以Test3Service測試,配置如下的負載均衡策略
#負載均衡策略:random,roundrobin,leastactive spring.dubbo.loadbalance=roundrobin
測試結果:可看出請求被分發到不同的服務端
3.容錯機制
以Test3Service測試,
1)配置如下的叢集容錯機制,
@Reference(version = "1.0.0",timeout =20000,retries = 1,cluster = "failover") private Test3Service test3Service;
2)在服務端Test3Service方法中:加入延時,模擬呼叫超時,然後啟動ProviderApplication工程(此時設定server.port=8091)
3)訪問http://localhost:8092/test3?name=zyq
4)cluster = “failover” 結果:
cluster = “failofast” 結果:
cluster = “failsafe” 結果:
cluster = “forking” 結果:
cluster = “broadcast” 結果:
4.服務降級mock
dubbo支援簡單和複雜模式的mock降級服務。
複雜降級:mock類需要實現介面,命名為:介面名+Mock
以Test1Service和Test2Service測試,加入延時,模擬呼叫超時的情況。返回結果:
5.api閘道器
通常對於服務端,不直接對外暴露,通常是通過一個機器和埠代理所有的服務模組,並對外表請求進行攔截驗證和許可權管理。這裡以一個簡單的攔截器模擬閘道器服務,單獨的工程dubbo-gateway測試。
結果:簡單測試當token=123456時,攔截器驗證通過,訪問正常。