为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

拉丁的传说 2023-05-10 15:05:46
我刚开始为我们的微服务设置使用消费者驱动的合同,因为它们主要是 Spring Boot 应用程序,自然选择 Spring Cloud Contract。但随之而来的是混乱。在文档中的所有示例中,合同都是在生产者端定义的,消费者从 maven repo 中检索它们。如果生产者定义它们,它如何被消费者驱动?我的理解是,从概念上讲,消费者将它们定义为生产者对其使用的部分 API 的期望。除了前面的问题,Spring Cloud Contract 是否可以在消费者端定义合约并在生产者端进行验证?
查看完整描述

1 回答

?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

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

合同定义可以放在生产者那里,也可以放在外部存储库中。消费者驱动的概念与存储合约的事实无关。这与创建合同的人或实际推动合同变更的人有关。另一件事是每个消费者是否可以定义一套自己的需求。这意味着一个消费者可能有与另一个消费者不同的需求。

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

使用 Spring Cloud Contract 的消费者驱动合同,是消费者提出更改建议并创建合同定义。消费者将 PR 发送到生产者团队的仓库或存储所有合约定义的单独仓库。做这件事的不是生产者,而是消费者。与此同时,消费者可以在不征得生产者许可的情况下在本地创建存根,并对 API 进行原型设计。一旦消费者完成了它的工作并且当然之前与生产者团队讨论了更改,那么可以发送带有建议更改的拉取请求。要记住的重要一点是,每个消费者都有自己的文件夹和他们的要求。例如,如果有消费者example1,并且example2有生产者,producer1那么在producer1合约文件夹会有2个文件夹,一个example1和第二个example2。两者都包含对特定消费者的期望。

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

最后,在消费者端,消费者可以切换到开始获取上传的存根,以始终获得最新版本的存根。

查看完整回答
反对 回复 2023-05-10
  • 1 回答
  • 0 关注
  • 77 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信