Как добиться асинхронных мутаций с помощью Apollo Gateway
При использовании Apollo Gateway шлюз будет пересылать мутации непосредственно в соответствующую службу реализации. Такие запросы синхронны.
Есть ли способ, которым Apollo Gateway может публиковать все мутации в брокере сообщений, таком как rabbitmq, чтобы мы могли достичь асинхронной связи между шлюзом и реализующими сервисами?
1 ответ
В качестве пояснения к вашему вопросу: запросы не синхронные, а последовательные.
В отличие от запросов, которые спецификация GraphQL оставляет открытыми для "разрешения распараллеливания", мутации ДОЛЖНЫ выполняться последовательно.
(Ссылки на спецификацию запросов и мутаций
6.2.1 Запрос
...
- Пусть данные будут результатом обычного выполнения ExecuteSelectionSet(selectionSet, queryType, initialValue, variableValues) (с возможностью распараллеливания).
6.2.2 Мутация
...
- Пусть данные будут результатом последовательного выполнения ExecuteSelectionSet(selectionSet, mutationType, initialValue, variableValues).
Широко распространен шаблон, согласно которому ваша мутация должна "вернуться, когда она будет завершена, и подождать, пока у нее появятся эти данные". Теоретически, однако, вы можете заставить свою мутацию запустить какое-то событие и просто ответить, сказав, что оно произошло. Затем вы можете использовать подписку, чтобы определить, когда ответ был готов. Опять же, это не совсем то, "как обычно используется GraphQL", но теоретически можно.