Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

710
Vistas
¿Cómo hacer una cola Redis (Bull) en un entorno Node.js que se implementa en Heroku?

Revisé toda la documentación y tengo algunos problemas para encontrar ejemplos de la implementación correcta. En primer lugar, tengo el complemento Heroku Redis como puedes ver a continuación:

https://i.stack.imgur.com/9kcXW.png

Instalé Redis y Bull en mi entorno Node.js y configuré Redis de la siguiente manera:

 const redis = require('redis'); const Queue = require('bull'); const redisClient = redis.createClient(process.env.REDIS_URL, { tls: { rejectUnauthorized: false } }); const bullQueue = new Queue('queue', process.env.REDIS_URL)

Estoy tratando de ejecutar la siguiente función como una tarea en segundo plano (esto es lo que recomienda Heroku para las funciones que tardan más de 0,5 segundos en completarse):

 app.post('/', async function(request, response) { const client = await pool.connect() //pool is just a node-postgres pool try { await client.query('BEGIN') let data = await function1(argumentList); await function2(data); await client.query('COMMIT') } catch(err) { await client.query('ROLLBACK') console.log(err) } try { await client.query('BEGIN') const setOfItems = await function3() var array = [] for (item of setOfItems) { if (conditional) { array.push(item) } } await client.query('COMMIT') let job = await bullQueue.add() response.send(JSON.stringify(array)) } catch(err) { await client.query('ROLLBACK') console.log(err) } });

Esta función hace algo de raspado web, llamadas a la base de datos y otras cosas, así que, como dije, tarda unos segundos en completarse. ¿Cómo debo cambiar mi función para agregar la solicitud a la cola de fondo y luego devolver la 'matriz' JSON.stringified al usuario? Lo siento si esta es una pregunta de novato en Redis, pero revisé todos los documentos y realmente no estoy seguro de cómo proceder.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Para empezar, const redis = require('redis'); no es necesario Bull se conecta a Redis bajo el capó, por lo que solo necesita proporcionar process.env.REDIS_URL para Heroku mientras lo hace. ( heroku config | grep REDIS devuelve las URL de punto final si es necesario)

Actualmente, todo el código de su base de datos no se delega en absoluto a la cola de tareas. Intente registrar una función de procesamiento asociada con la cola usando

 bullQueue.process(job => {/* your database work goes here */})

El job de parámetros debe completarse con cualquier dato serializable que su trabajador necesite para hacer su trabajo. Rellena este parámetro usando

 bullQueue.add(/* job data goes here */)

Un enfoque de alto nivel podría ser algo como:

 const Queue = require('bull'); const bullQueue = new Queue('queue', process.env.REDIS_URL) bullQueue.process(async job => { console.log(job.data.argumentList); /* do SQL stuff */ return [1, 2, 3, 4]; }); app.post('/', async (request, response) => { const job = await bullQueue.add({argumentList: ['some', 'data']}); const array = await job.finished(); response.send(JSON.stringify(array)) });

Existen muchas otras estrategias para obtener los resultados. Consulte las finalizaciones de trabajos recurrentes para obtener algunas ideas.

Ver también:

  • Queue#process
  • Queue#add
  • Cómo escuchar el evento completado en bull queue, solo para el trabajo actual .
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda