我一直在使用Spring Cloud Contracts。这是到目前为止我对工作流程的理解。
在服务器端
在客户端
我不明白的是,这个消费者是如何驱动的?合同似乎来自生产者,消费者似乎正在被动地测试生产者发布的内容(使用存根jar文件)。生产者可能会意外地不更新合同,而是做出重大更改。这可能会导致对客户端的测试通过,即使它应该失败了。这是真的还是我误解了从消费者方创建合同的步骤
有想法吗?
答案 0 :(得分:1)
消费者驱动的合同(CDC)开发基本上是扩展到生产者-消费者应用程序的测试驱动的开发(TDD)。由于是TDD,应该首先进行测试,然后再进行实施。而且由于它是由消费者驱动的-消费者会为生产者创建测试。
因此,假设我们有一个生产者和一个消费者,以及一些需要实现的新import { ExceptionFilter, Catch, ArgumentsHost } from '@nestjs/common';
import { HttpException } from '@nestjs/common';
@Catch(HttpException)
export class HttpExceptionFilter implements ExceptionFilter {
catch(exception: HttpException, host: ArgumentsHost) {
const ctx = host.switchToHttp();
const response = ctx.getResponse();
const request = ctx.getRequest();
const status = exception.getStatus();
response
.status(status)
.json({
statusCode: status,
timestamp: new Date().toISOString(),
path: request.url,
});
}
}
。在CDC中,工作流程如下(您可以在official documentation中找到更多信息)。
在消费者方面:
在生产者方面:
自消费者为新功能(但在生产者的存储库中)签定合同以来,这一切都变得有意义了-我们有一个消费者驱动的方法。