socket.io-redis-emitter icon indicating copy to clipboard operation
socket.io-redis-emitter copied to clipboard

Error: Cluster is not connected

Open alilland opened this issue 2 years ago • 1 comments

It looks like this library (and @socket.io/redis-adapter) are both incompatible with using createCkuster in the redis library

I am getting the following error:

Error: Cluster is not connected
    at RedisClusterSlots._RedisClusterSlots_getRandomClient (/Users/aronlilland/Documents/dev/controlair/notifications/node_modules/@redis/client/dist/lib/cluster/cluster-slots.js:193:15)
    at RedisClusterSlots.getClient (/Users/aronlilland/Documents/dev/controlair/notifications/node_modules/@redis/client/dist/lib/cluster/cluster-slots.js:54:120)
    at Commander._RedisCluster_execute (/Users/aronlilland/Documents/dev/controlair/notifications/node_modules/@redis/client/dist/lib/cluster/index.js:102:73)
    at Commander.sendCommand (/Users/aronlilland/Documents/dev/controlair/notifications/node_modules/@redis/client/dist/lib/cluster/index.js:65:98)
    at Commander.commandsExecutor (/Users/aronlilland/Documents/dev/controlair/notifications/node_modules/@redis/client/dist/lib/cluster/index.js:62:75)
    at Commander.BaseClass.<computed> [as publish] (/Users/aronlilland/Documents/dev/controlair/notifications/node_modules/@redis/client/dist/lib/commander.js:8:29)
    at BroadcastOperator.emit (/Users/aronlilland/Documents/dev/controlair/notifications/node_modules/@socket.io/redis-emitter/dist/index.js:262:26)
    at Socket.<anonymous> (/Users/aronlilland/Documents/dev/controlair/notifications/src/sockets/index.js:61:36)
    at Socket.emit (node:events:527:28)
    at Socket.emitUntyped (/Users/aronlilland/Documents/dev/controlair/notifications/node_modules/socket.io/dist/typed-events.js:69:22)
// mock example
const { createCluster } = require('redis')
const { Emitter } = require('@socket.io/redis-emitter')
const { Server } = require('socket.io')
const app = express()
const server = require('http').Server(app)
const log = require('../logger')('cache:client')

const rootNodes = [
  { url: `redis://${process.env.REDIS_HOST_1}` },
  { url: `redis://${process.env.REDIS_HOST_2}` },
  { url: `redis://${process.env.REDIS_HOST_3}` }
]

const client = createCluster({ rootNodes })

client.on('error', err => log.error(`Redis Cluster Error ${err}`))

const emitter = new Emitter(client)

// ...

const io = new Server(server)

io.on('connection', socket => {
  socket.on('event', event => {
    emitter.in('room1').emit('<some event>, event)
  })
})

using Node v16.15.0

redis@^4.1.0:
  version "4.1.0"
  resolved "https://registry.yarnpkg.com/redis/-/redis-4.1.0.tgz#6e400e8edf219e39281afe95e66a3d5f7dcf7289"
  integrity sha512-5hvJ8wbzpCCiuN1ges6tx2SAh2XXCY0ayresBmu40/SGusWHFW86TAlIPpbimMX2DFHOX7RN34G2XlPA1Z43zg==
  dependencies:
    "@redis/bloom" "1.0.2"
    "@redis/client" "1.1.0"
    "@redis/graph" "1.0.1"
    "@redis/json" "1.0.3"
    "@redis/search" "1.0.6"
    "@redis/time-series" "1.0.3"
"@socket.io/redis-emitter@^4.1.1":
  version "4.1.1"
  resolved "https://registry.yarnpkg.com/@socket.io/redis-emitter/-/redis-emitter-4.1.1.tgz#f274cf03cc9de7961b3224682479c27dc0ad9ade"
  integrity sha512-N0wfcfcVJvPF1AjIlZ5efxGCz+8uY6qeCwIaRU+QUCNdqvtXQtlC/MtUJQCwVqs1MWP6Bv3TDuZGC04gIj7YuQ==
  dependencies:
    debug "~4.3.1"
    notepack.io "~2.1.0"
    socket.io-parser "~4.0.4"

alilland avatar May 26 '22 00:05 alilland

Hi! I think you are missing client.connect().

Reference: https://socket.io/docs/v4/redis-adapter/#usage-1

darrachequesne avatar May 29 '22 21:05 darrachequesne

Closed due to inactivity, please reopen if needed.

darrachequesne avatar Nov 16 '22 10:11 darrachequesne