【问题标题】:Pact flow for Event Driven Applications事件驱动应用程序的协议流
【发布时间】:2020-08-02 12:49:46
【问题描述】:

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

假设我们有一个订单管理服务和一个运输管理服务Shipping 服务发出ShippingPreparedEvents,Order 服务接收到这些@s。

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

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

这种情况可以避免吗?我错过了什么吗?

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

非常感谢。

【问题讨论】:

    标签: pact pact-broker


    【解决方案1】:

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

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

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

    【讨论】:

    • 说得好,我没有考虑需要先部署客户,这样合同中就不再需要该字段。实际上,我最初的问题有点不同,但我试图为 StackOverflow 找到一个等效的情况,现在我意识到这并不是我想要的。我可能会创建一个后续问题,但我会将其标记为已解决。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-10-20
    • 2011-06-26
    • 1970-01-01
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    • 1970-01-01
    相关资源
    最近更新 更多