node-redis
node-redis copied to clipboard
Keyspace notifications are lost after reconnection
I notice that on nore-redis 3.1.2 and node-redis 4.1.0, there is no notification on keyspace (via psubscribe
) after a reconnection.
node-Redis 4.1.0
Here is a script to reproduce the issue that show the issue on redis 4.1.0 :
var redis = require('redis');
var subscriber = redis.createClient({
host: '127.0.0.1',
port: '6379',
});
subscriber.on('reconnecting', async () => {
console.log('subscriber reconnect again');
});
subscriber.on('error', (error) => {
console.log('subscriber error', error);
});
subscriber.connect().then(async () => {
console.log('subscriber connected');
await subscriber.sendCommand(['CONFIG', 'SET', 'notify-keyspace-events', 'KEA']);
await subscriber.pSubscribe(['__keyspace@*__:test'], async (message) => {
console.log('* subscriber receive event', message);
});
});
var publisher = redis.createClient({
host: '127.0.0.1',
port: '6379',
});
publisher.on('reconnecting', () => {
console.log('publisher reconnect');
});
publisher.on('error', () => {
console.log('publisher error');
});
publisher.connect().then(async () => {
console.log('publisher connected');
setInterval(async function () {
try {
console.log('-> publisher modifies key');
await publisher.set('test', Date.now().toString());
} catch (err) {
console.log(err);
}
}, 1000);
});
I launch the script in a terminal and in the other, I restart the redis server.
In the following logs, you can see that after the reconnection (at the end), the log subscriber receive event set
is not submit anymore.
Logs 4.1.0
subscriber connected publisher connected -> publisher modifies key
- subscriber receive event set -> publisher modifies key
- subscriber receive event set -> publisher modifies key
- subscriber receive event set -> publisher modifies key
- subscriber receive event set -> publisher modifies key
- subscriber receive event set -> publisher modifies key
- subscriber receive event set
////// Redis server is stopped and restarted after 3 sec
subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly at Socket.
(/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118) at Object.onceWrapper (node:events:642:26) at Socket.emit (node:events:527:28) at TCP. (node:net:709:12) subscriber reconnect again publisher error publisher reconnect subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118) at Object.onceWrapper (node:events:642:26) at Socket.emit (node:events:527:28) at TCP. (node:net:709:12) subscriber reconnect again subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118) at Object.onceWrapper (node:events:642:26) at Socket.emit (node:events:527:28) at TCP. (node:net:709:12) publisher error publisher reconnect subscriber reconnect again subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118) at Object.onceWrapper (node:events:642:26) at Socket.emit (node:events:527:28) at TCP. (node:net:709:12) subscriber reconnect again subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118) at Object.onceWrapper (node:events:642:26) at Socket.emit (node:events:527:28) at TCP. (node:net:709:12) subscriber error TypeError: Cannot read properties of undefined (reading 'destroy') at RedisSocket._RedisSocket_connect (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:119:67) at processTicksAndRejections (node:internal/process/task_queues:96:5) publisher error publisher reconnect subscriber reconnect again publisher error publisher reconnect subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118) at Object.onceWrapper (node:events:642:26) at Socket.emit (node:events:527:28) at TCP. (node:net:709:12) subscriber reconnect again subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118) at Object.onceWrapper (node:events:642:26) at Socket.emit (node:events:527:28) at TCP. (node:net:709:12) subscriber error TypeError: Cannot read properties of undefined (reading 'destroy') at RedisSocket._RedisSocket_connect (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:119:67) at processTicksAndRejections (node:internal/process/task_queues:96:5) subscriber reconnect again publisher error publisher reconnect subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118) at Object.onceWrapper (node:events:642:26) at Socket.emit (node:events:527:28) at TCP. (node:net:709:12) subscriber reconnect again subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118) at Object.onceWrapper (node:events:642:26) at Socket.emit (node:events:527:28) at TCP. (node:net:709:12) subscriber error TypeError: Cannot read properties of undefined (reading 'destroy') at RedisSocket._RedisSocket_connect (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:119:67) at processTicksAndRejections (node:internal/process/task_queues:96:5) subscriber reconnect again publisher error publisher reconnect subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118) at Object.onceWrapper (node:events:642:26) at Socket.emit (node:events:527:28) at TCP. (node:net:709:12) subscriber reconnect again subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118) at Object.onceWrapper (node:events:642:26) at Socket.emit (node:events:527:28) at TCP. (node:net:709:12) subscriber error TypeError: Cannot read properties of undefined (reading 'destroy') at RedisSocket._RedisSocket_connect (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:119:67) at processTicksAndRejections (node:internal/process/task_queues:96:5) publisher error publisher reconnect subscriber reconnect again publisher error publisher reconnect subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118) at Object.onceWrapper (node:events:642:26) at Socket.emit (node:events:527:28) at TCP. (node:net:709:12) subscriber reconnect again subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118) at Object.onceWrapper (node:events:642:26) at Socket.emit (node:events:527:28) at TCP. (node:net:709:12) subscriber error TypeError: Cannot read properties of undefined (reading 'destroy') at RedisSocket._RedisSocket_connect (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:119:67) at processTicksAndRejections (node:internal/process/task_queues:96:5) subscriber reconnect again publisher error publisher reconnect subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118) at Object.onceWrapper (node:events:642:26) at Socket.emit (node:events:527:28) at TCP. (node:net:709:12) subscriber reconnect again subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118) at Object.onceWrapper (node:events:642:26) at Socket.emit (node:events:527:28) at TCP. (node:net:709:12) subscriber error TypeError: Cannot read properties of undefined (reading 'destroy') at RedisSocket._RedisSocket_connect (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:119:67) at processTicksAndRejections (node:internal/process/task_queues:96:5) subscriber reconnect again publisher error publisher reconnect subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118) at Object.onceWrapper (node:events:642:26) at Socket.emit (node:events:527:28) at TCP. (node:net:709:12) subscriber reconnect again subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118) at Object.onceWrapper (node:events:642:26) at Socket.emit (node:events:527:28) at TCP. (node:net:709:12) subscriber error TypeError: Cannot read properties of undefined (reading 'destroy') at RedisSocket._RedisSocket_connect (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:119:67) at processTicksAndRejections (node:internal/process/task_queues:96:5) subscriber reconnect again publisher error publisher reconnect subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118) at Object.onceWrapper (node:events:642:26) at Socket.emit (node:events:527:28) at TCP. (node:net:709:12) subscriber reconnect again subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118) at Object.onceWrapper (node:events:642:26) at Socket.emit (node:events:527:28) at TCP. (node:net:709:12) subscriber error TypeError: Cannot read properties of undefined (reading 'destroy') at RedisSocket._RedisSocket_connect (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:119:67) at processTicksAndRejections (node:internal/process/task_queues:96:5) subscriber reconnect again publisher error publisher reconnect subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118) at Object.onceWrapper (node:events:642:26) at Socket.emit (node:events:527:28) at TCP. (node:net:709:12) subscriber reconnect again subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118) at Object.onceWrapper (node:events:642:26) at Socket.emit (node:events:527:28) at TCP. (node:net:709:12) subscriber error TypeError: Cannot read properties of undefined (reading 'destroy') at RedisSocket._RedisSocket_connect (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:119:67) at processTicksAndRejections (node:internal/process/task_queues:96:5) subscriber reconnect again publisher error publisher reconnect subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118) at Object.onceWrapper (node:events:642:26) at Socket.emit (node:events:527:28) at TCP. (node:net:709:12) subscriber reconnect again subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118) at Object.onceWrapper (node:events:642:26) at Socket.emit (node:events:527:28) at TCP. (node:net:709:12) subscriber error TypeError: Cannot read properties of undefined (reading 'destroy') at RedisSocket._RedisSocket_connect (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:119:67) at processTicksAndRejections (node:internal/process/task_queues:96:5) subscriber reconnect again publisher error publisher reconnect subscriber reconnect again publisher error publisher reconnect subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118) at Object.onceWrapper (node:events:642:26) at Socket.emit (node:events:527:28) at TCP. (node:net:709:12) subscriber reconnect again subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118) at Object.onceWrapper (node:events:642:26) at Socket.emit (node:events:527:28) at TCP. (node:net:709:12) subscriber error TypeError: Cannot read properties of undefined (reading 'destroy') at RedisSocket._RedisSocket_connect (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:119:67) at processTicksAndRejections (node:internal/process/task_queues:96:5) subscriber reconnect again subscriber reconnect again publisher error publisher reconnect subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118) at Object.onceWrapper (node:events:642:26) at Socket.emit (node:events:527:28) at TCP. (node:net:709:12) subscriber reconnect again subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118) at Object.onceWrapper (node:events:642:26) at Socket.emit (node:events:527:28) at TCP. (node:net:709:12) subscriber error TypeError: Cannot read properties of undefined (reading 'destroy') at RedisSocket._RedisSocket_connect (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:119:67) at processTicksAndRejections (node:internal/process/task_queues:96:5) subscriber error TypeError: Cannot read properties of undefined (reading 'destroy') at RedisSocket._RedisSocket_connect (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:119:67) at processTicksAndRejections (node:internal/process/task_queues:96:5) subscriber error TypeError: Cannot read properties of undefined (reading 'destroy') at RedisSocket._RedisSocket_connect (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:119:67) at processTicksAndRejections (node:internal/process/task_queues:96:5) publisher error publisher reconnect subscriber reconnect again subscriber reconnect again publisher error publisher reconnect subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118) at Object.onceWrapper (node:events:642:26) at Socket.emit (node:events:527:28) at TCP. (node:net:709:12) subscriber reconnect again subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118) at Object.onceWrapper (node:events:642:26) at Socket.emit (node:events:527:28) at TCP. (node:net:709:12) subscriber error TypeError: Cannot read properties of undefined (reading 'destroy') at RedisSocket._RedisSocket_connect (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:119:67) at processTicksAndRejections (node:internal/process/task_queues:96:5) subscriber error TypeError: Cannot read properties of undefined (reading 'destroy') at RedisSocket._RedisSocket_connect (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:119:67) at processTicksAndRejections (node:internal/process/task_queues:96:5) subscriber reconnect again subscriber reconnect again publisher error publisher reconnect subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118) at Object.onceWrapper (node:events:642:26) at Socket.emit (node:events:527:28) at TCP. (node:net:709:12) subscriber reconnect again subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118) at Object.onceWrapper (node:events:642:26) at Socket.emit (node:events:527:28) at TCP. (node:net:709:12) subscriber error TypeError: Cannot read properties of undefined (reading 'destroy') at RedisSocket._RedisSocket_connect (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:119:67) at processTicksAndRejections (node:internal/process/task_queues:96:5) subscriber error TypeError: Cannot read properties of undefined (reading 'destroy') at RedisSocket._RedisSocket_connect (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:119:67) at processTicksAndRejections (node:internal/process/task_queues:96:5) subscriber reconnect again publisher error subscriber reconnect again subscriber error Error: connect ECONNREFUSED 127.0.0.1:6379 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1187:16) { errno: -61, code: 'ECONNREFUSED', syscall: 'connect', address: '127.0.0.1', port: 6379 } publisher reconnect subscriber reconnect again subscriber error Error: connect ECONNREFUSED 127.0.0.1:6379 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1187:16) { errno: -61, code: 'ECONNREFUSED', syscall: 'connect', address: '127.0.0.1', port: 6379 } subscriber error Error: connect ECONNREFUSED 127.0.0.1:6379 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1187:16) { errno: -61, code: 'ECONNREFUSED', syscall: 'connect', address: '127.0.0.1', port: 6379 } publisher error subscriber error Error: connect ECONNREFUSED 127.0.0.1:6379 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1187:16) { errno: -61, code: 'ECONNREFUSED', syscall: 'connect', address: '127.0.0.1', port: 6379 } subscriber reconnect again subscriber error Error: connect ECONNREFUSED 127.0.0.1:6379 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1187:16) { errno: -61, code: 'ECONNREFUSED', syscall: 'connect', address: '127.0.0.1', port: 6379 } subscriber reconnect again subscriber error Error: connect ECONNREFUSED 127.0.0.1:6379 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1187:16) { errno: -61, code: 'ECONNREFUSED', syscall: 'connect', address: '127.0.0.1', port: 6379 } -> publisher modifies key subscriber reconnect again subscriber reconnect again subscriber reconnect again subscriber reconnect again subscriber reconnect again subscriber reconnect again subscriber reconnect again subscriber reconnect again subscriber reconnect again subscriber reconnect again subscriber reconnect again subscriber reconnect again subscriber reconnect again subscriber reconnect again subscriber reconnect again publisher reconnect subscriber reconnect again -> publisher modifies key -> publisher modifies key -> publisher modifies key -> publisher modifies key -> publisher modifies key -> publisher modifies key -> publisher modifies key -> publisher modifies key -> publisher modifies key -> publisher modifies key ^C (⎈ |eks-euwest1:default)MBPdefasterize [11:13:32] [~/fasterize/libs-ts/packages/storage-website-config] [storage_list_index *] -> %
Also, after the reconnect, I can see that the number of socket in state ESTABLISHED increases from 2 to 11.
node-Redis 3.1.2
In node-redis 3.1.2, the keyspace notifications are also lost after reconnection but the number of socket in state ESTABLISHED stays at 2.
var redis = require('redis');
var subscriber = redis.createClient({
host: '127.0.0.1',
port: '6379',
});
subscriber.on('pmessage', function (pattern, channel, message) {
console.info('subscriber', pattern, channel, message);
});
subscriber.on('psubscribe', function () {
console.log('subscriber psubscribe');
});
subscriber.on('reconnecting', async () => {
console.log('subscriber reconnect again');
});
subscriber.on('error', (error) => {
console.log('subscriber error');
});
let first = true;
subscriber.on('ready', async () => {
if (first) {
subscriber.config('set', 'notify-keyspace-events', 'KEA', function (err) {
console.log('error', err);
});
first = false;
}
console.log('subscriber subscribe');
subscriber.psubscribe(['__keyspace@*__:test']);
});
var publisher = redis.createClient({
host: '127.0.0.1',
port: '6379',
});
publisher.on('reconnecting', () => {
console.log('publisher reconnect');
});
publisher.on('error', (error) => {
console.log('publisher error', error);
});
publisher.on('ready', async () => {
console.log('publisher connected');
setInterval(async function () {
try {
console.log('publisher send');
await publisher.set('test', Date.now().toString());
} catch (err) {
console.log(err);
}
}, 1000);
});
Log 3.1.2
publisher connected subscriber subscribe error null subscriber psubscribe publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher reconnect subscriber reconnect again publisher error Error: connect ECONNREFUSED 127.0.0.1:6379 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1187:16) { errno: -61, code: 'ECONNREFUSED', syscall: 'connect', address: '127.0.0.1', port: 6379 } subscriber error publisher send publisher reconnect subscriber reconnect again publisher error Error: connect ECONNREFUSED 127.0.0.1:6379 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1187:16) { errno: -61, code: 'ECONNREFUSED', syscall: 'connect', address: '127.0.0.1', port: 6379 } subscriber error publisher reconnect subscriber reconnect again publisher error Error: connect ECONNREFUSED 127.0.0.1:6379 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1187:16) { errno: -61, code: 'ECONNREFUSED', syscall: 'connect', address: '127.0.0.1', port: 6379 } subscriber error publisher send publisher reconnect subscriber reconnect again publisher error Error: connect ECONNREFUSED 127.0.0.1:6379 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1187:16) { errno: -61, code: 'ECONNREFUSED', syscall: 'connect', address: '127.0.0.1', port: 6379 } subscriber error publisher send publisher send publisher reconnect subscriber reconnect again publisher error Error: connect ECONNREFUSED 127.0.0.1:6379 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1187:16) { errno: -61, code: 'ECONNREFUSED', syscall: 'connect', address: '127.0.0.1', port: 6379 } subscriber error publisher send publisher send publisher send publisher reconnect subscriber reconnect again publisher connected subscriber psubscribe subscriber subscribe subscriber psubscribe publisher send publisher send publisher send publisher send publisher send publisher send publisher send publisher send publisher send publisher send publisher send publisher send
Workaround
The unique workaround that I found for the moment is to call punsubscribe
and quit
in the reconnecting
event handler and then creating a new Redis Client with a new socket.
subscriber.once('reconnecting', async () => {
console.log('subscriber reconnect again');
setTimeout(async () => {
try {
await subscriber.punsubscribe();
await subscriber.quit();
console.log('subscriber after quit');
} catch (err) {
console.log(err);
}
createNewSubscriber();
}, 100);
});
Note
I tried to see the behavior of the client for the subscribe
and publish
method and in this case, the subscription is correctly maintained after the reconnection.
Environment:
- Node.js Version: v16.15.0
- Redis Server Version: 6.2
- Node Redis Version: 4.1.0 and 3.1.2
- Platform: Mac OS 12.12.1