Spring Cloud合同-是消费者驱动的吗?

时间:2019-08-01 13:19:48

标签: java spring-boot-test spring-cloud-contract

对于我们的微服务设置,我只是从消费者驱动合同开始,由于它们主要是Spring Boot应用程序,因此自然选择Spring Cloud Contract。 但是随之而来的是混乱。在docs的所有示例中,合同都是在生产方定义的,消费者从maven仓库中检索合同。如果生产者定义它们,它是由消费者驱动的吗?

我的理解是,从概念上讲,消费者将它们定义为生产者对其使用的部分API的期望。除了上一个问题外,Spring Cloud Contract是否可以在消费者方定义合同并在生产者方进行验证?

1 个答案:

答案 0 :(得分:5)

感谢这个问题。是的,Spring Cloud Contract可以由消费者驱动或由生产者驱动。

合同定义可以由生产者提供,也可以位于外部存储库中。消费者驱动的概念与合同存储的事实无关。这与创建合同的人或推动合同变更的人有关。另一件事是每个消费者是否可以定义一组自己的需求。这意味着一个消费者可以有与另一个消费者不同的需求。

因此,在针对生产者驱动方法的Spring Cloud Contract中,生产者只是创建合同,而实际上并不关心不同的使用者是否以不同的方式使用其API。 API的生产者创建例如1个针对所有消费者的合同定义,而要与该合同保持一致是消费者的问题。

对于具有Spring Cloud Contract的消费者驱动的合同,是由消费者来建议更改并创建合同定义。消费者将PR发送到生产者团队的仓库或存储所有合同定义的单独仓库。做到这一点的不是生产者,而是消费者。同时,消费者可以在本地创建存根,而无需向生产者征求许可,并且可以对API进行原型设计。消费者完成工作后,当然还要与生产者团队讨论变更之前,然后可以发送拉动请求以及建议的变更。要记住的重要一点是,每个使用者都有自己的文件夹和他们的要求。例如。如果有消费者example1example2并且有生产者producer1,则在producer1的合同文件夹下将有2个文件夹,一个为example1,第二个为文件夹example2。两者都将包含对特定消费者的期望。

然后,生产者接管PR,并在生产者端进行验证。测试已生成。编写实现并通过测试后,就可以上传存根。

最后,在消费者方面,消费者可以切换为开始获取上载的存根,以始终获取存根的最新版本。