在微服務(wù)架構(gòu)下,不同服務(wù)由不一樣的團(tuán)隊(duì)開發(fā)和維護(hù)吴旋。如果個(gè)別服務(wù)由某些原因升級(jí)后需要調(diào)整接口厢破,還沒有改造完成,影響到服務(wù)消費(fèi)方正常使用接口摩泪。
Ian Robinson提出Consumer-Driver Contracts,消費(fèi)者驅(qū)動(dòng)契約嚷掠,簡稱CDC荞驴。能解決上述所描述的問題,這里契約是指服務(wù)消費(fèi)者和服務(wù)提供者約定戴尸,消費(fèi)者消費(fèi)契約,提供者提供契約项棠。
在沒有加入契約時(shí)挎峦,微服務(wù)集成測試調(diào)用流程如圖1,如果服務(wù)提供者返回響應(yīng)內(nèi)容發(fā)生改變坦胶,消費(fèi)者無法正常集成測試了。
加入契約峭咒,微服務(wù)集成測試流程如圖2纪岁,在開發(fā)過程中,消費(fèi)者無須等到服務(wù)提供者開發(fā)完成漩氨,就能利用契約能進(jìn)行預(yù)集成測試,同時(shí)叫惊,能降到聯(lián)調(diào)接口成本霍狰。
上述主要說明加入契約的好處,我們要做到知其然知其所以然蔗坯,看看下面消費(fèi)者驅(qū)動(dòng)契約的流程圖:
下面給大家解讀流程圖步悠。
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文件主要包括請(qǐng)求信息和響應(yīng)內(nèi)容杠茬, groovy文件可以理解為契約內(nèi)容弛随。在producer服務(wù)要加入spring-cloud-starter-contract-verifier,為了驗(yàn)證是否符合契約舀透。
搭建消費(fèi)者驅(qū)動(dòng)契約需要用到:
- Java8
- Spring Boot (2.04.RELEASE)
- Spring Cloud Contract (2.0.1.RELEASE)
- Maven
暫時(shí)不詳細(xì)說整個(gè)開發(fā)流程,日后會(huì)把開發(fā)流程寫完逗载。大家下載在github上下載CDC例子進(jìn)行解讀和運(yùn)行。
參考資料:Consumer-Driven Contract Testing with Spring Cloud Contract