- 在 Apollo Server 中,使用 FederatedSchemaAdapter 将 GraphQL schema 转换为 FederatedSchemaAdapter,然后将其传递给 Apollo Gateway。
const { ApolloServer } = require('apollo-server');
const { buildFederatedSchema } = require('@apollo/federation');
const { FederatedSchemaAdapter } = require('@apollo/federation/dist/composition');
const schema = buildFederatedSchema([...]);
const federatedSchema = new FederatedSchemaAdapter(schema);
const server = new ApolloServer({
gateway: new ApolloGateway({
schema: federatedSchema,
// ...
}),
// ...
});
server.listen().then(({ url }) => {
console.log(`Server ready at ${url}`);
});
- 使用 Apollo Gateway 提供的 onSchemaChange 事件,检查每个子图是否可用,如果不可用则抛出错误。以下是示例代码。
const { ApolloGateway } = require('@apollo/gateway');
const gateway = new ApolloGateway({
serviceList: [...],
});
gateway.onSchemaChange(({ serviceList }) => {
serviceList.forEach(async (service) => {
const result = await service.checkHealth();
if (result.status === 'fail' || !result.schema) {
throw new Error(`Service ${service.name} is unavailable`);
}
});
});
app.use(gateway.getMiddleware());