Skip to content

Keyspace notifications are lost after reconnection #2155

Open
@abarre

Description

@abarre

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions