Федерация Apollo (шлюз): как отправлять разные «ключи» разным реализуемым микросервисам?

Я пытаюсь создать федеративную службу apollo со шлюзом и 3 реализацией микросервисов.

MS1:

      type Movie @key(fields: "id name") {
    id: String!
    name: String
}

MS2:

      type Location @key(fields: "id") {
    id: String!
    longitude: Float!
    latitude: Float!
} 

type Movie @key(fields: "id") @extends {
    id: String! @external
    location: Location
}

MS3:

      type Award @key(fields: "name"){
    name: String!
    count: Int
} 

type Movie @key(fields: "name") @extends {
    name: String! @external
    award: Award
}

MS1 предоставляет имя и идентификатор . имя должно быть отправлено в MS3 для процесса разрешения, а идентификатор должен использоваться MS2 для процесса разрешения.

Этот подход работал с более старой версией apollo-gateway / apollo-server, но с последними версиями я получаю следующие сообщения об ошибках.

      {"stack":"Error: A valid schema couldn't be composed. The following composition errors were found:\n\t[ms2] Movie -> extends from ms1 but specifies an invalid @key directive. Valid @key directives are specified by the originating type. Available @key directives for this type are:\n\t@key(fields: \"id name\")\n   ...}

Такой подход к предоставлению ключей тоже не сработал:

      type Movie @key(fields: "id") @key(fields: "name") {

Как должна выглядеть схема для описанного варианта использования?

0 ответов

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