Выполнение синхронного веб-запроса при использовании микросервисов не является идеальной ситуацией, которую создают многие компании, предоставляющие услуги промежуточного программного обеспечения. Причина в том, что это вводит временную связь между двумя службами; если ваша зависимость не работает или не обслуживается, ваш запрос не выполняется.
Лучшее решение, которое чуть лучше соответствует DDD, - это рассмотреть, какой именно процесс у вас есть, и увидеть обязанности, которые существуют. Как правило, когда вы делаете это, вы получаете границы B C (которые переходят на поверхность API микросервиса), которые более единообразны и в целом способны полностью выполнить действие.
Три варианта, которые я вижу из самого Вот небольшая информация:
Разделите обработку на две части:
- Одна часть получает команду "OrderRequestes" и проверяет ее в соответствии с вашей компанией требования и затем запускает событие «OrderValidated»
- Другая часть вашей системы получает событие «OrderValidates» и обрабатывает его с неявным предположением, что данные там уже проверены, чтобы быть в порядке
Поместите копию подмножества данных, которые вам необходимы для проверки внутри службы, которая будет обрабатывать запрос заказа. Это очень естественное решение, если нет проблем с локальным дублированием данных и если это не проблема, если они немного устаревшие
Если вам нужно быть максимально последовательным, разработайте процесс так, что служба, которая выполняет обработку заказа , владеет данными, которые ей необходимы для проверки на вершине обработки. Обращаем ваше внимание на то, что из опыта работы на поверхности люди просят быть максимально последовательными, в действительности это не всегда является реальной проблемой, и одно из приведенных выше решений будет намного проще реализовать и поддержать. (также подумайте, что произойдет в вашем случае, если вы использовали веб-запрос для проверки заказа, но после возврата результата проверки и до обработки заказа что-то изменилось, так что заказ больше не будет действительным)