smrchy / rsmq

Redis Simple Message Queue
MIT License
1.76k stars 125 forks source link

Not functioning properly with AWS ElastiCache #132

Closed caffeines closed 2 years ago

caffeines commented 3 years ago

We have used rsmq successfully in our dev environment having both redislab connection and local docker instance of Redis. But in our production environment having AWS ElastiCache Redis instance inside a VPC, the code gets stuck forever inside RedisSMQ.createQueueAsync(), although Redis connection succeeds instantly if this line is commented out.

The sample code-flow of my scenario is like the following:

let rsmq = new RedisSMQ({
  host: config.redis.host,
  port: config.redis.port,
  password: config.redis.password,
  ns: 'rsmq',
  realtime: true,
});
const createQueue = async (queueName) => {
  try {
    const queue = await rsmq.createQueueAsync({
      qname: queueName,
      maxsize: -1,
      vt: 10,
    });
    return queue;
  } catch (err) {
    if (err.message !== 'Queue exists') {
      return Promise.reject(err);
    }
    return null;
  }
};

Is there any special requirement for AWS ElastiCache connection?

t4sk commented 3 years ago

the code gets stuck forever inside RedisSMQ.createQueueAsync()

try calling process.exit(0) at the end of your async node script. This worked for me

async function main() {
  try {
    const conn = new RedisSMQ({
      host: config.redis.host,
      port: config.redis.port,
      password: config.redis.password,
      ns: 'rsmq',
      realtime: true,
    });
    console.log(`Creating queue...`)
    await conn.createQueueAsync({ qname: "Q NAME"})
  } catch (error) {
    console.error(error)
    process.exit(1)
  }
  process.exit(0)
}

main()