Пакт-поток для событийно-ориентированных приложений

Хотя Pact поддерживает тестирование сообщений, я считаю, что рекомендуемый поток в Pact Nirvana не совсем соответствует потоку, который, как я понимаю, требуется управляемому событиям приложению.

Допустим, у нас есть служба управления заказами и служба управления доставкой. Служба Доставка выдает ShippingPreparedEvent, которые получает служба Заказ.

Если мы удалим поле внутри ShippingPreparedEvent, я ожидаю, что сначала внесу изменения в службу заказов, чтобы она перестала читать старое поле. Разверните его. Затем внесите изменения в службу Доставка и разверните ее. Таким образом, не будет простоев в работе сервисов.

Однако я считаю, что Pact ожидает, что сначала будет развернута служба Shipping (она является поставщиком события), чтобы контракт можно было проверить перед развертыванием потребителя. В этом случае развертывание сначала провайдера сломает моего потребителя.

Можно ли как-то избежать этой ситуации? Я что-нибудь упускаю?

Чтобы предоставить больше контекста, по этой ссылке мы видим, что разные изменения потребуют разного порядка развертывания. https://docs.confluent.io/current/schema-registry/avro.html#summary Я не буду использовать ни Kafka, ни Avro, но считаю, что мой алгоритм будет аналогичным.

Большое спасибо.


person Rafaesp    schedule 30.07.2020    source источник


Ответы (1)


Если бы мы удалили поле внутри ShippingPreparedEvent, я бы ожидал, что сначала внесу изменения в службу Order, чтобы она перестала читать старое поле. Разверните его. А затем внесите изменения в службу доставки и разверните ее. Таким образом, не будет простоев в работе сервисов.

Я согласен. Что конкретно в гайде Pact Nirvana создает у вас впечатление, что это не тот путь? Pact (и Pact Broker) на самом деле не заботится о порядке развертывания.

В вашем случае удаление поля приведет к сбою проверки can-i-deploy, потому что удаление поля нарушит Order Management Service. Единственный подход - удалить использование поля у потребителя, опубликовать новую версию этого контракта и сначала развернуть ее в производственной среде.

person Matthew Fellows    schedule 02.08.2020
comment
Это хороший момент, я не думал о необходимости сначала развертывать клиента, чтобы поле больше не требовалось в контракте. На самом деле, мой первоначальный вопрос был немного другим, но я попытался найти эквивалентную ситуацию для StackOverflow и теперь понимаю, что это не совсем то, что я хотел. Я мог бы задать дополнительный вопрос, но я отмечу его как решенный. Спасибо! - person Rafaesp; 03.08.2020