Java 如何保证两个微服务之间的接口不被破坏?
假设我们有两个微服务:客户端和服务器。微服务体系结构最基本的特征之一是能够为每个微服务提供单独的管道,这意味着我们必须能够独立地将它们部署到生产环境中 这意味着不同的团队可以开发不同的微服务,并且在一个微服务上开发的某些功能比在另一个微服务上开发的更快。这通常会导致客户机和服务器之间的契约(接口)被破坏,因此客户机发送给服务器的JSON不再有效Java 如何保证两个微服务之间的接口不被破坏?,java,microservices,Java,Microservices,假设我们有两个微服务:客户端和服务器。微服务体系结构最基本的特征之一是能够为每个微服务提供单独的管道,这意味着我们必须能够独立地将它们部署到生产环境中 这意味着不同的团队可以开发不同的微服务,并且在一个微服务上开发的某些功能比在另一个微服务上开发的更快。这通常会导致客户机和服务器之间的契约(接口)被破坏,因此客户机发送给服务器的JSON不再有效 问题是如何防止两个微服务之间的通信因其之间的合同破裂而中断的情况?处理此类问题的最佳策略是什么?一种解决方案是端点版本控制。假设您的微服务是RESTAP
问题是如何防止两个微服务之间的通信因其之间的合同破裂而中断的情况?处理此类问题的最佳策略是什么?一种解决方案是端点版本控制。假设您的微服务是RESTAPI,您可以指示您的团队增加API端点的版本,如果他们对该端点所做的任何更改都会破坏它。遵循一个弃用周期,6个月后删除对旧端点的支持。它让您有时间切换到较新的版本,而不会破坏任何依赖旧版本的功能
另一个解决方案是,使用编排层,而不是微服务与微服务对话。也就是说,一些微服务的管理者将任何微服务到微服务的通信抽象出来。作为微服务消费者的应用程序随后成为编排层的消费者,编排层决定需要调用哪个微服务api。如果API契约发生更改,这仍然会导致契约中断问题,但您可以在业务流程层进行修复,在该层中,它是集中的,而不是协调跨团队的微服务更改。客户端微服务团队应该为合同编写测试套件,并让它们在服务器微服务的构建管道中运行。这可以作为CI-CD的一部分实现自动化。因此,服务器微服务团队将立即知道他们的更改对其他客户机团队的影响 问题是如何防止两人之间的交流 微服务是因为它们之间的合同破裂而破裂的吗
合同测试?雇佣懂得如何测试合同的QA人员?编写一个正确定义JSON的契约规范?