Nest Js 微服务保持 TCP 连接

问题描述 投票:0回答:1

我有一个基本的 Nest Js 应用程序 HTTP 服务器和一个使用 TCP 传输的微服务 Nest Js 应用程序。

我正在向我的 HTTP 服务器发送 HTTP 请求,该服务器通过 TCP 将事件消息发送到我的微服务,并且它运行良好。

我已使用 Copilot 在 AWS ECS 上部署了这 2 个应用程序,HTTP 应用程序配置为应用程序负载均衡器,微服务配置为网络负载均衡器

一段时间不活动后,我的 TCP 连接由于 NLB TCP 超时而结束,所以我想知道是否有办法直接通过 Nest JS 使用 Keep-Alive 功能。

还有其他解决方案可以保持连接吗?

我还尝试向 HTTP 服务器的清单文件添加多个 health-chek 路径,但这不是由 Copilot 处理的

tcp nestjs amazon-ecs nlb
1个回答
0
投票

通过创建将连接配置为保持活动状态的自定义套接字类,在 NestJS 微服务中启用 TCP Keep-Alive。这可以防止由于不活动而导致的 AWS NLB 超时(我在 docker swarm 理想网络连接方面遇到了这个问题)。

import { JsonSocket } from '@nestjs/microservices/helpers';
import { Socket } from 'net';

class CustomTcpSocket extends JsonSocket {
  constructor(socket: Socket) {
    socket.setKeepAlive(true, 10000); // Enable Keep-Alive with a 10s 

    super(socket);
  }
}
app.connectMicroservice<MicroserviceOptions>({
  transport: Transport.TCP,
  options: {
    host: '0.0.0.0',
    port: tcpPort, // Replace with your port
    socketClass: CustomTcpSocket,
  },
});
© www.soinside.com 2019 - 2024. All rights reserved.