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

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

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

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