Microservices 是否可以从可执行架构获取类型def?

Microservices 是否可以从可执行架构获取类型def?,microservices,apollo,graphql-js,Microservices,Apollo,Graphql Js,拥有一个微服务架构,我希望API是完整的,即使一些微服务已经关闭。我知道这个问题可以通过适当的编排来解决,但我感兴趣的是是否可以只使用代码来处理这种情况 问题是: 我有3个微服务:core、A、B。如果我启动core,A关闭,我需要core成功启动并包含A的api。为了实现这一点,我尝试从每个远程GraphQL模式中获取类型定义,并将它们存储在etcd或其他地方,如果服务不可访问,则使用创建可执行模式,从而创建其模式 如果在core中,我只能通过apollo链接获得可执行模式,我该怎么做 con

拥有一个微服务架构,我希望API是完整的,即使一些微服务已经关闭。我知道这个问题可以通过适当的编排来解决,但我感兴趣的是是否可以只使用代码来处理这种情况

问题是:

我有3个微服务:core、A、B。如果我启动core,A关闭,我需要core成功启动并包含A的api。为了实现这一点,我尝试从每个远程GraphQL模式中获取类型定义,并将它们存储在etcd或其他地方,如果服务不可访问,则使用创建可执行模式,从而创建其模式

如果在core中,我只能通过apollo链接获得可执行模式,我该怎么做

const getRemoteSchema = async ({ uri, name }) => {
  const link = setContext((request, previousContext) => ({
    headers: {
      context: `${JSON.stringify(previousContext.graphqlContext || {})}`,
    },
  })).concat(new HttpLink({ uri, fetch }));

  let schema = await introspectSchema(link).catch(error => new ApolloError(error.message, 'INTERNAL_SERVER_ERROR', error));

  if (schema instanceof ApolloError) // do something
如果我没有弄错的话,我只能在获取的模式上调用以下方法:getQueryType、getTypeMap等。。。它们返回一个对象,而不是字符串定义。是否可以获取typedef并存储它们。我不想存储整个可执行模式,因为这可能会带来安全问题,因为解析器将存储在数据库中


我不想使用内省,因为它将在生产中被禁用,也不想让每个微服务独立发送它的typedef。好的,经过一些挖掘,我找到了解决方案,即使用
printSchema
graphql/utilities

import { printSchema } from 'graphql/utilities';
const typeDefs = printSchema(schema);