使用dgraph-js的Apollo GraphQL服务是否需每次请求后关闭Client Stub?
Dgraph全局Client Stub是否需要关闭(Apollo服务器场景)
对于持续运行的Apollo GraphQL服务器,不需要主动关闭全局的dgraphStub和dgraphClient,原因如下:
客户端生命周期设计
Dgraph的DgraphClientStub和DgraphClient本身就是为长运行服务设计的,内部维护了连接池,复用连接能大幅提升性能。频繁创建和销毁客户端反而会导致连接开销增大,影响服务性能。事务资源已正确释放
你在查询函数里已经通过await txn.discard()正确处理了事务资源——只读事务调用discard()会释放事务相关的临时资源,不会占用全局客户端的连接池资源。这部分逻辑是正确的,不需要额外操作全局客户端。仅在优雅停机时需要关闭
只有当服务器需要优雅终止时(比如收到停机信号),才需要调用dgraphStub.close()来清理底层的网络连接,避免资源泄漏。如果你的Apollo服务器没有实现优雅停机逻辑,或者服务是持续运行的,完全不需要做这个操作。
额外注意事项
- 保持
dgraph-js版本为最新,避免旧版本中可能存在的连接池或资源泄漏问题。 - 生产环境可以监控Dgraph服务器的连接数指标,确认连接池处于正常复用状态,无需担心未知错误。
内容的提问来源于stack exchange,提问作者Grandma Kisses
相关产品推荐
相关产品推荐

