如何在 NestJS 中热重载联邦网关

Posted

技术标签:

【中文标题】如何在 NestJS 中热重载联邦网关【英文标题】:how to hot reload federation gateway in NestJS 【发布时间】:2021-08-08 09:44:46 【问题描述】:

问题

在联邦嵌套应用程序中,网关会收集来自其他服务的所有模式并形成完整的图表。问题是,子模式改变后如何重新运行模式集合?

当前的解决方法

重启网关可以解决问题,但似乎不是一个优雅的解决方案。

其他资源

    Apollo 服务器支持managed federation,它基本上恢复了网关和服务之间的依赖关系。遗憾的是,我找不到任何与 NestJS 相关的内容。

【问题讨论】:

【参考方案1】:

在使用 NestJS 配置网关应用程序时,并且已经与 Apollo studio 集成时,则无需在 GraphQLGatewayModule 中定义任何 serviceList。这就是你的模块初始化的样子:

GraphQLGatewayModule.forRootAsync(
  useFactory: async () => (
    gateway: ,
    server: 
      path: '/graphql',
    ,
  ),
)

应在托管您的网关应用程序的机器上声明以下环境变量:

APOLLO_KEY: "service:<graphid>:<hash>"
APOLLO_SCHEMA_CONFIG_DELIVERY_ENDPOINT: "https://uplink.api.apollographql.com/"

Federated GraphQL 服务部署后,您可能需要运行 apollo/rover CLI service:push 命令来更新写入模式注册表的模式,然后推送到被轮询的上行 URL 通过网关定期

npx apollo service:push --graph=<graph id> --key=service:<graph id>:<hash> --variant=<environment name> --serviceName=<service name> --serviceURL=<URL of your service with /graphql path> --endpoint=<URL of your service with /graphql path>

【讨论】:

以上是关于如何在 NestJS 中热重载联邦网关的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在 Ktor 中热重载静态文件?

在 Spring Boot 2.1 中热重载 Thymeleaf 模板和资源包

使用 golang 在 docker 中热重载不起作用(github.com/cosmtrek/air)

NESTJS 网关/Websocket - 如何通过 socket.emit 发送 jwt access_token

使用 Webpack Dev Middleware 在 Webpack 中热重载 CSS 文件的最简单方法

热重载不起作用,但在 Android Studio 中热重启有效