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

如何在Node.js中避免NATS STALE CONNECTION错误?

Node.js环境下NATS STALE CONNECTION错误的解决与规避方案

当Web应用长时间无交互时,NATS服务器会将闲置连接标记为失效并抛出STALE CONNECTION错误,以下是具体的解决和规避方案:

错误信息

NATS server NatsError: STALE CONNECTION
    at ProtocolHandler.toError (/app/node_modules/ts-nats/lib/protocolhandler.js:895:20)
    at ProtocolHandler.processErr (/app/node_modules/ts-nats/lib/protocolhandler.js:906:35)
    at Timeout._onTimeout (/app/node_modules/ts-nats/lib/protocolhandler.js:1006:26)
    at listOnTimeout (node:internal/timers:571:11)
    at process.processTimers (node:internal/timers:512:7) {
  code: 'NATS_PROTOCOL_ERR',
  chainedError: undefined
}

1. 配置连接心跳参数

NATS通过心跳机制检测连接存活状态,在创建连接时显式配置pingInterval和maxPingsOut,确保服务器能持续收到客户端的存活信号:

const { connect } = require('ts-nats');

async function createNatsConnection() {
  const nc = await connect({
    servers: 'nats://your-nats-server:4222',
    pingInterval: 30000, // 每30秒发送一次心跳ping
    maxPingsOut: 2 // 连续2次ping未收到响应则触发重连
  });
  return nc;
}

2. 启用自动重连机制

确保开启ts-nats的自动重连功能,配置重连间隔和重试次数,连接断开后自动恢复:

const nc = await connect({
  servers: 'nats://your-nats-server:4222',
  reconnect: true,
  reconnectTimeWait: 5000, // 每次重连间隔5秒
  maxReconnectAttempts: -1 // 无限重试重连(可根据需求设置具体次数)
});

// 监听重连事件,便于日志记录和业务恢复
nc.on('reconnect', () => {
  console.log('成功重新连接到NATS服务器');
});

3. 主动维护闲置连接

针对长时间无交互的场景,在应用层添加定时任务,定期发送ping操作保持连接活跃:

// 每25秒发送一次ping,避免连接被标记为闲置
setInterval(async () => {
  if (nc && nc.isConnected()) {
    try {
      await nc.ping();
    } catch (err) {
      console.error('发送ping失败:', err);
    }
  }
}, 25000);

4. 调整NATS服务器端配置

如果有权限修改NATS服务器配置,可通过max_inactivity参数延长服务器判定连接闲置的时间(默认通常为60秒),在nats.conf中添加:

max_inactivity: 120s

修改后重启NATS服务器生效。

内容的提问来源于stack exchange,提问作者kashyap

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 07:52:56