0

虽然 Pact 支持消息测试,但我发现“Pact Nirvana”中推荐的流程与我理解的事件驱动应用程序需要的流程不太匹配。

假设我们有一个Order management service和一个Shipping management serviceShipping服务发出ShippingPreparedEventOrder服务接收的s 。

如果我们删除了 中的一个字段ShippingPreparedEvent,我希望首先对 Order 服务进行更改,以便它停止读取旧字段。部署它。然后在Shipping服务中进行更改并部署它。这样,服务不会有任何停机时间。

但是,我相信 Pact 会期望首先部署Shipping服务(它是事件的提供者),以便在部署消费者之前可以验证合同。在这种情况下,首先部署提供者会破坏我的消费者。

这种情况能以某种方式避免吗?我错过了什么吗?

只是为了提供更多上下文,我们可以在此链接中看到不同的更改将需要不同的部署顺序。https://docs.confluent.io/current/schema-registry/avro.html#summary 我不会使用 Kafka 或 Avro,但我相信我的流程会类似。

非常感谢。

4

1 回答 1

1

如果我们删除了 ShippingPreparedEvent 中的一个字段,我希望首先对 Order 服务进行更改,以便它停止读取旧字段。部署它。然后在 Shipping 服务中进行更改并部署它。这样,服务不会有任何停机时间。

我同意。Pact Nirvana 指南中的哪些具体内容让您觉得这不是正确的选择?Pact(和 Pact Broker)实际上并不关心部署的顺序。

在您的情况下,删除该字段会导致can-i-deploy检查失败,因为删除该字段会破坏Order Management Service. 唯一的方法是从消费者那里删除字段使用,发布该合同的新版本并首先部署到生产环境。

于 2020-08-02T04:49:46.540 回答