You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Deno与Express的Apollo Server如何实现优雅关闭?

在Deno中实现Apollo Server的优雅关闭

在Deno环境下使用Apollo Server时,直接调用server.stop()是核心操作,但还需要结合Deno的信号监听来完成完整的优雅关闭流程,具体实现步骤如下:

  • 启动Apollo Server后,监听Deno的终止信号(如SIGINT、SIGTERM)
  • 当收到终止信号时,调用server.stop()——该方法会自动停止接收新请求,并等待正在处理的请求完成后再关闭服务
  • 在server.stop()的Promise完成后,退出Deno进程

示例代码如下:

import { ApolloServer } from "@apollo/server";
import { startStandaloneServer } from "@apollo/server/standalone";

const server = new ApolloServer({
  typeDefs,
  resolvers,
});

const { url } = await startStandaloneServer(server, {
  listen: { port: 4000 },
});

console.log(`🚀 Server ready at ${url}`);

// 监听终止信号,触发优雅关闭
for (const signal of ["SIGINT", "SIGTERM"] as const) {
  Deno.addSignalListener(signal, async () => {
    console.log(`收到${signal}信号,开始优雅关闭服务器...`);
    await server.stop();
    console.log("服务器已优雅关闭");
    Deno.exit(0);
  });
}

需要注意:

  • server.stop()本身已经封装了等待正在处理的请求完成的逻辑,无需额外实现类似Node.js中ApolloServerPluginDrainHttpServer插件的请求排空功能
  • 必须手动监听信号并触发server.stop(),否则进程可能被强制终止,导致正在处理的请求中断

内容的提问来源于stack exchange,提问作者Mix Master Mike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 04:04:49