You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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{awaitsubscriber.punsubscribe();awaitsubscriber.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
The text was updated successfully, but these errors were encountered:
I suspect the issue you're seeing here is that the reconnection to redis isn't actually succeeding correctly; I was investigating a pubsub issue for the Mastodon project, and was able to add in some debugging where I saw the reconnecting event fire, then the connect event (despite redis not being alive at this point), followed by:
Where I'd added in console.log('Resubscribe', { commands }) to the pub-sub.js method resubscribe
From what I can tell, those commands never succeed in resolving for a pubsub connection, but for a regular connection, you do actually get a 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 :
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
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.
Log 3.1.2
Workaround
The unique workaround that I found for the moment is to call
punsubscribe
andquit
in thereconnecting
event handler and then creating a new Redis Client with a new socket.Note
I tried to see the behavior of the client for the
subscribe
andpublish
method and in this case, the subscription is correctly maintained after the reconnection.Environment:
The text was updated successfully, but these errors were encountered: