健康检查
确定 Apollo Server 的健康状态
Apollo Server 4 已不再 支持内置健康检查GraphQL级别的健康检查 来确保您的服务器成功服务流量
负载均衡器通常使用健康检查来确定服务器是否可用并准备好服务流量。
GraphQL级别的健康检查
要确定您的 GraphQL 服务器 是否健康的最简单方法就是运行一个 GraphQL 操作.
每个 GraphQL 服务器 都支持一个简单的 查询,该查询请求最顶层 Query
类型的 __typename
。这意味着每个 GraphQL 服务器 都可以响应一个 GET
请求,例如 URL:
https://your.server/graphql?query=%7B__typename%7D
注意,此健康检查将运行实际的 GraphQL 操作。如果您的服务器需要特殊头或cookie来运行任何 查询,您需要在请求中提供这些。
在与您的健康检查一起发送 apollo-require-preflight: true
头部,可以确保 Apollo Server's CSRF 防止 功能不会阻止它。
如果您想为您的 HTTP 服务器创建一个与 GraphQL 执行引擎的健康状态无关的健康检查(例如 无关 的,例如 Apollo Server 3 的健康检查功能),您可以在您的网络框架中添加一个始终成功的 GET
处理程序。
以下是一个带 expressMiddleware
的 HTTP 服务器健康检查的示例:
// imports, etc.const app = express();const server = new ApolloServer({typeDefs,resolvers,});await server.start();app.use('/graphql', cors<cors.CorsRequest>(), express.json(), expressMiddleware(server));await new Promise<void>((resolve) => app.listen({ port: 4000 }, resolve));// Our GraphQL server is listening for GraphQL operations// on `https://127.0.0.1:4000/graphql`console.log(`🚀 Server ready at https://127.0.0.1:4000/graphql`);// Requests to `https://127.0.0.1:4000/health` now return "Okay!"app.get('/health', (req, res) => {res.status(200).send('Okay!');});
// imports, etc.const app = express();const server = new ApolloServer({typeDefs,resolvers,});await server.start();app.use('/graphql', cors(), express.json(), expressMiddleware(server));await new Promise((resolve) => app.listen({ port: 4000 }, resolve));// Our GraphQL server is listening for GraphQL operations// on `https://127.0.0.1:4000/graphql`console.log(`🚀 Server ready at https://127.0.0.1:4000/graphql`);// Requests to `https://127.0.0.1:4000/health` now return "Okay!"app.get('/health', (req, res) => {res.status(200).send('Okay!');});
如果您正在使用 startStandaloneServer
,在创建 HTTP 服务器健康检查之前,您必须首先切换到使用 expressMiddleware
函数使用 expressMiddleware
函数。