在微服務(wù)架構(gòu)下,不同服務(wù)由不一樣的團(tuán)隊(duì)開發(fā)和維護(hù)。如果個別服務(wù)由某些原因升級后需要調(diào)整接口,還沒有改造完成,影響到服務(wù)消費(fèi)方正常使用接口。
Ian Robinson提出Consumer-Driver Contracts,消費(fèi)者驅(qū)動契約,簡稱CDC。能解決上述所描述的問題,這里契約是指服務(wù)消費(fèi)者和服務(wù)提供者約定,消費(fèi)者消費(fèi)契約,提供者提供契約。
在沒有加入契約時,微服務(wù)集成測試調(diào)用流程如圖1,如果服務(wù)提供者返回響應(yīng)內(nèi)容發(fā)生改變,消費(fèi)者無法正常集成測試了。

加入契約,微服務(wù)集成測試流程如圖2,在開發(fā)過程中,消費(fèi)者無須等到服務(wù)提供者開發(fā)完成,就能利用契約能進(jìn)行預(yù)集成測試,同時,能降到聯(lián)調(diào)接口成本。

上述主要說明加入契約的好處,我們要做到知其然知其所以然,看看下面消費(fèi)者驅(qū)動契約的流程圖:

下面給大家解讀流程圖。
consumer使用producer發(fā)布stubs.jar進(jìn)行接口測試,也就是說consumer接收到響應(yīng)內(nèi)容是stub.jar返回。在consumer服務(wù)要加入pring-cloud-starter-stub-runner依賴包,目的為了能夠調(diào)用stubs.jar包含的契約。
producer需要生成stubs.jar,提供consumer使用。通過contract maven插件生成stub jar包,然后install到本地。在生成之前需要配置groovy文件,groovy文件主要包括請求信息和響應(yīng)內(nèi)容, groovy文件可以理解為契約內(nèi)容。在producer服務(wù)要加入spring-cloud-starter-contract-verifier,為了驗(yàn)證是否符合契約。
搭建消費(fèi)者驅(qū)動契約需要用到:
- Java8
- Spring Boot (2.04.RELEASE)
- Spring Cloud Contract (2.0.1.RELEASE)
- Maven
暫時不詳細(xì)說整個開發(fā)流程,日后會把開發(fā)流程寫完。大家下載在github上下載CDC例子進(jìn)行解讀和運(yùn)行。
參考資料:Consumer-Driven Contract Testing with Spring Cloud Contract