#spring #spring-boot #spring-cloud #spring-cloud-contract
#spring #spring-загрузка #spring-cloud #весна-облако-контракт
Вопрос:
Я хочу начать использовать SCC, но я не могу найти, как реализовать один конкретный случай, который у нас есть. Служба получает входные данные в виде сообщения Kafka и должна вызвать внешний rest api с полезной нагрузкой на основе этого входного сообщения. И это также происходит наоборот: когда мы получаем вызов rest, результатом должно быть сообщение Kafka. Есть ли какая -либо поддержка в SCC для этого?
Ответ №1:
Конечно. Ваше приложение является потребителем и производителем сообщения. Также он имеет контроллер и использует http-контроллер из другой службы. Вам нужно создать следующие контракты.
Контракт 1 — на производителя сообщения kafka, чтобы проверить, может ли он отправить сообщение брокеру (назовем его service A). Служба B повторно использует заглушку этого сообщения, чтобы проверить, может ли она использовать сообщение от kafka.
Контракт 2 — на производителе конечной точки http, которая будет вызываться при получении сообщения (служба C).
Контракт 3 — на производителя конечной точки http, которая будет называться «наоборот» (сервис B)
Контракт 4 — производитель сообщения для кафки «наоборот».
Важно помнить, что вы тестируете их изолированно. Это означает, что если вы получаете сообщение от kafka, а затем хотите вызвать их по протоколу http, вы имитируете все, что вызывает ваш прослушиватель сообщений. То же самое для связи на основе http. Если ваш контроллер использует службу приложений, вы будете издеваться над ней.
Комментарии:
1. Спасибо за ваш ответ, он немного прояснил путаницу. Однако у меня все еще есть вопрос, который мне не ясен из документов или примеров, как создать контракт, в котором запрос api приводит к сообщению Kafka. Можете ли вы дать мне некоторое представление об этом?
2. Итак, в этом случае, о котором я упоминал, у меня было бы 2 контракта, насколько я понял. Первый будет для вызова api (ответа на запрос), а второй — для выходного сообщения Kafka, в котором будет использоваться какой-то макет метода с помощью triggeredBy()
3. Да, это именно то, что вы бы сделали