nodejs在redis失败时终止

Posted

技术标签:

【中文标题】nodejs在redis失败时终止【英文标题】:nodejs terminates on redis failure 【发布时间】:2013-09-04 16:44:14 【问题描述】:

我正在使用 Node.js、Express、Redis 和 Socket.io。当 Redis 宕机时,Node.js 将终止。

我怎样才能防止这种情况,可能是在某个地方进行代码重新连接之类的?

输出:

info - socket.io started
Express server listening on port 3000

错误:

events.js:72
        throw er; // Unhandled 'error' event
              ^ Error: Redis connection to 127.0.0.1:6380 failed - connect ECONNREFUSED
    at RedisClient.on_error (...../node_modules/redis/index.js:151:24)
    at Socket.<anonymous> (...../node_modules/redis/index.js:86:14)
    at Socket.EventEmitter.emit (events.js:95:17)
    at net.js:426:14
    at process._tickCallback (node.js:415:13)

【问题讨论】:

对错误信息表示抱歉。不知道如何在这里格式化它们。 如果您可以将以下答案标记为已接受,那就太好了 - 这是一个有用的答案。 好久不见。我记不太清了。你认为这是答案吗?如果是这样,我会标记它。 【参考方案1】:

您的 redis 客户端实例似乎没有错误处理程序。你能提供一些你的代码的摘录吗?也许我们可以通过这种方式更好地帮助您。只是错误信息少了一点。

如果我不得不猜测,那么我会说你没有错误处理程序......

请看这里:https://github.com/mranney/node_redis#usage

你有错误回调吗?

例子:

var redis = require("redis"),
client = redis.createClient();


// This is required so your error doesn't bubble
// upwards and kills your instance

client.on("error", function (err) 
    console.log("Error " + err);
);

node_redis 客户端会自动重新连接,因此您无需处理此问题,尽管您可以配置 max_attempts 和其他选项。见这里:https://github.com/mranney/node_redis#rediscreateclientport-host-options

希望我能提供一些有用的信息

【讨论】:

我会试试这个。谢谢! 不是redis客户端,是socket.io redis适配器。【参考方案2】:

如果您使用的是 socket.io redisAdapter,请在创建您的 socket.io 服务器后执行此操作:

io.of('/').adapter.on('error', (err)=>console.log('adapter error',err));

【讨论】:

以上是关于nodejs在redis失败时终止的主要内容,如果未能解决你的问题,请参考以下文章

当 InternetOpenURL 尝试(并且失败)连接时,如何避免充分利用 CPU 或终止?

NodeJS 终止错误的差异

在Windows上使用gdb调试MinGW程序,而不是在断言失败时终止

Nodejs终止产生的子进程

由于连接被强制终止,使用 ngrok 测试 gRPC 失败

HTTP 连接在 Amazon EC2 上托管的 nodejs 应用程序中过早终止