Estoy desarrollando un servidor que toma las solicitudes enviadas por POST y las distribuye a los agentes activos que consultan una base de datos MySQL. Tengo dos tablas, la tabla de users y la tabla de requests . Cada vez que recibo una nueva solicitud, ejecuto una consulta que consulta los agentes activos y los ordena por número de solicitudes en cola y la marca de tiempo de la última acción realizada. Hasta ahora funciona bien.
El problema es que cuando tengo un agente que necesita desconectarse, tengo que redistribuir las solicitudes en cola entre los otros agentes. Para ello implementé un forEach que pasa por cada solicitud, luego realizo la consulta de agentes activos y tomo la primera fila y le asigno la solicitud a esa. La falla es que no sé por qué al mismo agente se le asigna la misma tarea, ya que la consulta del agente activo se repite para cada solicitud y, por lo tanto, debería aumentar la cantidad de solicitudes en cola del agente inmediatamente anterior.
Aquí está el código que he implementado:
app.post('/panel/redist', function (peticion, respuesta) { pool.getConnection(function (error, connection) { let query = '' // Look pends requests ## query = `select * from solicitudes where status = 1` connection.query(query, function (error, solicitudes, campos) { if (solicitudes.length > 0) { solicitudes.forEach(solicitud => { // Look active agents and order by number of requests and timestamp query = `select usuarios.id, nombre, count(agente) conteo, last_action from usuarios left join solicitudes on usuarios.id = solicitudes.agente where usuarios.login = 'active' and tipo_usuario = 1 group by nombre order by conteo asc, last_action asc` connection.query(query, function (error, agentes, campos) { if (agentes.length > 0) { query = `UPDATE solicitudes SET agente = ${connection.escape(agentes[0].id)}, status = '2' WHERE id=${solicitud.id}` connection.query(query, function (error, campos, filas) { console.log(`Success asign to:${solicitud.id}`) }) } }) }) } }) connection.release() respuesta.json({ type: 'success' }) }) })Esto está en Node.js usando el conector mysql2.
Gracias.