Есть ли проблемы при использовании Pact для асинхронных сообщений, которые представляют собой команды или запросы вместо событий?

В спецификации Pact для асинхронного обмена сообщениями потребителями являются службы, которые читают сообщения, и провайдеры, которые пишут эти сообщения.

Как описано в разделе Пакт сообщений и команда Шаблон этого сообщения в блоге, который хорошо работает для сообщений, которые являются своего рода Событием. Эти сообщения интересуют множество потребителей, и они их потребляют. Но не подходит, когда сообщения представляют собой команды.

Однако, если мы рассмотрим шаблон распределенных команд, команды сериализуются как сообщения, которые асинхронно вызывают другие службы. Команды обычно нацелены на службу, известную вызывающему компоненту. Вместо брокера сообщений, на который могут подписаться несколько служб, команда помещается в очередь, которая регулярно опрашивается получателем.

В этом сценарии отношение к создателю сообщения как к провайдеру кажется нелогичным. Вместо этого создатель сообщения использует функции получателя команд. Это похоже на шаблон запрос-ответ, но асинхронный и без ответа, поскольку нет обратного канала через очередь.

Это похоже на сообщения запроса:

Запросы описывают запрос информации или состояния. У запроса может быть несколько обработчиков. При отправке запросов клиент указывает, хочет ли он получить результат от одного или от всех доступных обработчиков запросов.

Службы, содержащие обработчики запросов, будут ожидать сообщений с запросами. С точки зрения Пакта, они будут потребителями. Если эта информация интересует разные службы, необходимо написать тест потребителя для каждой службы, желающей получить данные.

Я не вижу реальной проблемы со всем этим, но меня беспокоит, что такие инструменты, как can-i-deploy или конвейеры CI, имеют предположения о вариантах использования, о которых я не знаю.

Кто-нибудь знает больше по этой теме? Есть какие-то проблемы, о которых я не знаю? Я буду использовать Pact для JVM и Axon Framework & Server, но я чувствую, что это что-то связано со спецификацией Пакта.

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


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


Ответы (1)


У меня есть пример (Axon Framework - Spring Boot) использования Pact для проверки сообщений (команд, событий), передающих контракты https://github.com/idugalic/axon-contract-testing-demo

Обратите внимание, что это демонстрация. В реальном мире вам следует рассмотреть возможность использования Pact Broker вместо совместного использования контрактов в папке pacts и интеграции брокера Pact в вашу CI.

person Ivan Dugalic    schedule 15.06.2020
comment
Это очень хороший пример, но он не охватывает случаи, когда у нас есть несколько потребителей, читающих сообщения от нескольких поставщиков. Ожидаете ли вы в этом случае проблем в долгосрочной перспективе? - person Rafaesp; 16.06.2020