1. 程式人生 > >微服務-dubbo快速實踐1

微服務-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時,攔截器驗證通過,訪問正常。

這裡寫圖片描述

這裡寫圖片描述