Как добиться асинхронных мутаций с помощью Apollo Gateway

При использовании Apollo Gateway шлюз будет пересылать мутации непосредственно в соответствующую службу реализации. Такие запросы синхронны.

Есть ли способ, которым Apollo Gateway может публиковать все мутации в брокере сообщений, таком как rabbitmq, чтобы мы могли достичь асинхронной связи между шлюзом и реализующими сервисами?

1 ответ

В качестве пояснения к вашему вопросу: запросы не синхронные, а последовательные.

В отличие от запросов, которые спецификация GraphQL оставляет открытыми для "разрешения распараллеливания", мутации ДОЛЖНЫ выполняться последовательно.

(Ссылки на спецификацию запросов и мутаций

6.2.1 Запрос

...

  1. Пусть данные будут результатом обычного выполнения ExecuteSelectionSet(selectionSet, queryType, initialValue, variableValues) (с возможностью распараллеливания).

6.2.2 Мутация

...

  1. Пусть данные будут результатом последовательного выполнения ExecuteSelectionSet(selectionSet, mutationType, initialValue, variableValues).

Широко распространен шаблон, согласно которому ваша мутация должна "вернуться, когда она будет завершена, и подождать, пока у нее появятся эти данные". Теоретически, однако, вы можете заставить свою мутацию запустить какое-то событие и просто ответить, сказав, что оно произошло. Затем вы можете использовать подписку, чтобы определить, когда ответ был готов. Опять же, это не совсем то, "как обычно используется GraphQL", но теоретически можно.

Другие вопросы по тегам