jerkjs 2.5.6 → 2.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/CHANGELOG.md +167 -79
  2. package/README.md +134 -146
  3. package/RESULTADOS_WAF.md +63 -0
  4. package/doc-2.5/ADMIN_EXTENSION_COMMANDS_MANUAL.md +261 -0
  5. package/doc-2.5/ADMIN_EXTENSION_HOOK_EXAMPLE.md +28 -0
  6. package/doc-2.5/ADMIN_EXTENSION_INTEGRATION_MANUAL.md +232 -0
  7. package/doc-2.5/CACHE_SYSTEM_MAP.md +206 -0
  8. package/doc-2.5/MANUAL_MODULOS_ADMIN.md +287 -0
  9. package/doc-2.5/QUEUE_CLI_MODULE_MANUAL.md +289 -0
  10. package/doc-2.5/QUEUE_SYSTEM_MANUAL.md +320 -0
  11. package/doc-2.5/ROUTE_CACHE_MODULE_MANUAL.md +205 -0
  12. package/doc-2.5/WAF_MODULE_MANUAL.md +229 -0
  13. package/index.js +19 -4
  14. package/jerk-admin-client/README.md +69 -0
  15. package/jerk-admin-client/package.json +23 -0
  16. package/jerk-admin-client.js +257 -0
  17. package/lib/admin/AdminExtension.js +491 -0
  18. package/lib/admin/ModuleLoader.js +77 -0
  19. package/lib/admin/config.js +21 -0
  20. package/lib/admin/modules/CacheModule.js +145 -0
  21. package/lib/admin/modules/ControllerGeneratorModule.js +414 -0
  22. package/lib/admin/modules/QueueManagementModule.js +265 -0
  23. package/lib/admin/modules/RouteCacheModule.js +227 -0
  24. package/lib/admin/modules/RouteManagerModule.js +468 -0
  25. package/lib/admin/modules/STATS_MODULE_README.md +113 -0
  26. package/lib/admin/modules/StatsModule.js +140 -0
  27. package/lib/admin/modules/SystemModule.js +140 -0
  28. package/lib/admin/modules/TimeModule.js +95 -0
  29. package/lib/admin/modules/ViewCacheStatsModule.js +92 -0
  30. package/lib/admin/modules/WAFModule.js +737 -0
  31. package/lib/cache/CacheHooks.js +141 -0
  32. package/lib/core/server.js +223 -77
  33. package/lib/middleware/firewall.js +112 -17
  34. package/lib/mvc/viewEngine.js +89 -5
  35. package/lib/queue/GlobalQueueStorage.js +38 -0
  36. package/lib/queue/QueueSystem.js +451 -0
  37. package/lib/queue/admin_example.js +114 -0
  38. package/lib/queue/example.js +268 -0
  39. package/lib/queue/integration.js +109 -0
  40. package/lib/router/RouteMatcher.js +242 -54
  41. package/lib/utils/globalStats.js +16 -0
  42. package/lib/utils/globalViewCacheInfo.js +16 -0
  43. package/lib/utils/globalWAFStats.js +54 -0
  44. package/package.json +2 -2
  45. package/test-colors.js +46 -0
  46. package/test-help-alias.js +31 -0
@@ -0,0 +1,289 @@
1
+ # Manual del Módulo CLI de Gestión de Colas para JERK Framework
2
+
3
+ ## Tabla de Contenidos
4
+ 1. [Introducción](#introducción)
5
+ 2. [Comandos Disponibles](#comandos-disponibles)
6
+ 3. [Uso Básico](#uso-básico)
7
+ 4. [Uso Avanzado](#uso-avanzado)
8
+ 5. [Ejemplos de Uso](#ejemplos-de-uso)
9
+ 6. [Solución de Problemas](#solución-de-problemas)
10
+
11
+ ## Introducción
12
+
13
+ El módulo de Gestión de Colas es una extensión del sistema de administración CLI de JERK Framework que permite monitorear y gestionar las colas de tareas del sistema. Proporciona comandos para ver el estado de las colas, pausarlas, reanudarlas, limpiarlas y gestionar tareas fallidas.
14
+
15
+ ## Comandos Disponibles
16
+
17
+ ### Comandos Generales de Colas
18
+ - `queues`: Muestra el estado de todas las colas del sistema
19
+ - `queue-info`: Muestra información detallada de una cola específica
20
+ - `queue-pause`: Pausa una cola específica
21
+ - `queue-resume`: Reanuda una cola específica
22
+ - `queue-clear`: Limpia las tareas pendientes de una cola específica
23
+ - `queue-retry-failed`: Reintenta las tareas fallidas de una cola específica
24
+
25
+ ## Uso Básico
26
+
27
+ ### Conectar al Sistema de Administración
28
+
29
+ Para acceder al módulo de gestión de colas, primero debes conectarte al sistema de administración:
30
+
31
+ ```bash
32
+ telnet localhost 9999
33
+ ```
34
+
35
+ O alternativamente:
36
+
37
+ ```bash
38
+ nc localhost 9999
39
+ ```
40
+
41
+ ### Ver el estado de todas las colas
42
+
43
+ Comando: `queues`
44
+
45
+ Este comando muestra el estado de todas las colas registradas en el sistema:
46
+
47
+ ```
48
+ > queues
49
+
50
+ === Colas del Sistema ===
51
+ imagenes:
52
+ Concurrencia: 3/3
53
+ Tareas pendientes: 0
54
+ Tareas en proceso: 0
55
+ Tareas fallidas: 0
56
+ Estado: INACTIVO
57
+ Reintentos: 2
58
+ Retraso de reintento: 1000ms
59
+
60
+ correos:
61
+ Concurrencia: 2/2
62
+ Tareas pendientes: 1
63
+ Tareas en proceso: 1
64
+ Tareas fallidas: 0
65
+ Estado: PROCESANDO
66
+ Reintentos: 3
67
+ Retraso de reintento: 2000ms
68
+
69
+ pagos:
70
+ Concurrencia: 1/1
71
+ Tareas pendientes: 0
72
+ Tareas en proceso: 0
73
+ Tareas fallidas: 2
74
+ Estado: INACTIVO
75
+ Reintentos: 5
76
+ Retraso de reintento: 3000ms
77
+
78
+ backups:
79
+ Concurrencia: 1/1
80
+ Tareas pendientes: 0
81
+ Tareas en proceso: 0
82
+ Tareas fallidas: 0
83
+ Estado: INACTIVO
84
+ Reintentos: 3
85
+ Retraso de reintento: 5000ms
86
+
87
+ >
88
+ ```
89
+
90
+ ### Ver información detallada de una cola específica
91
+
92
+ Comando: `queue-info`
93
+
94
+ Este comando solicita el nombre de una cola y muestra información detallada:
95
+
96
+ ```
97
+ > queue-info
98
+
99
+ Introduce el nombre de la cola:
100
+ > pagos
101
+
102
+ === Información de la Cola: pagos ===
103
+ Concurrencia: 1/1
104
+ Tareas pendientes: 0
105
+ Tareas en proceso: 0
106
+ Tareas fallidas: 2
107
+ Estado: INACTIVO
108
+ Reintentos: 5
109
+ Retraso de reintento: 3000ms
110
+ Total de workers: 0
111
+
112
+ >
113
+ ```
114
+
115
+ ## Uso Avanzado
116
+
117
+ ### Pausar una cola
118
+
119
+ Comando: `queue-pause`
120
+
121
+ Pausa temporalmente el procesamiento de tareas en una cola específica:
122
+
123
+ ```
124
+ > queue-pause
125
+
126
+ Introduce el nombre de la cola:
127
+ > correos
128
+
129
+ ✅ Cola 'correos' pausada exitosamente.
130
+
131
+ >
132
+ ```
133
+
134
+ Cuando una cola está pausada, no procesará nuevas tareas, pero las tareas que ya estaban en proceso se completarán normalmente.
135
+
136
+ ### Reanudar una cola
137
+
138
+ Comando: `queue-resume`
139
+
140
+ Reanuda el procesamiento de tareas en una cola específica:
141
+
142
+ ```
143
+ > queue-resume
144
+
145
+ Introduce el nombre de la cola:
146
+ > correos
147
+
148
+ ✅ Cola 'correos' reanudada exitosamente.
149
+
150
+ >
151
+ ```
152
+
153
+ ### Limpiar una cola
154
+
155
+ Comando: `queue-clear`
156
+
157
+ Elimina todas las tareas pendientes de una cola específica (no afecta a las tareas que ya están en proceso):
158
+
159
+ ```
160
+ > queue-clear
161
+
162
+ Introduce el nombre de la cola:
163
+ > imagenes
164
+
165
+ ✅ Cola 'imagenes' limpiada exitosamente (tareas pendientes eliminadas).
166
+
167
+ >
168
+ ```
169
+
170
+ ### Reintentar tareas fallidas
171
+
172
+ Comando: `queue-retry-failed`
173
+
174
+ Reintenta todas las tareas que han fallado definitivamente en una cola específica:
175
+
176
+ ```
177
+ > queue-retry-failed
178
+
179
+ Introduce el nombre de la cola:
180
+ > pagos
181
+
182
+ ✅ Reintento de tareas fallidas iniciado para la cola 'pagos'.
183
+
184
+ >
185
+ ```
186
+
187
+ ## Ejemplos de Uso
188
+
189
+ ### Ejemplo 1: Monitoreo de colas
190
+
191
+ Para monitorear constantemente el estado de las colas, puedes usar el comando `queues` repetidamente:
192
+
193
+ ```
194
+ > queues
195
+ imagenes: Pendientes=0, En proceso=2, Fallidas=0, Pausada=false
196
+ correos: Pendientes=5, En proceso=1, Fallidas=0, Pausada=false
197
+ pagos: Pendientes=0, En proceso=0, Fallidas=1, Pausada=false
198
+ backups: Pendientes=0, En proceso=0, Fallidas=0, Pausada=false
199
+ >
200
+ ```
201
+
202
+ ### Ejemplo 2: Gestión de alta carga
203
+
204
+ Si una cola está recibiendo demasiadas tareas y necesitas detener temporalmente el procesamiento:
205
+
206
+ ```
207
+ > queue-pause
208
+ Introduce el nombre de la cola:
209
+ > correos
210
+ ✅ Cola 'correos' pausada exitosamente.
211
+
212
+ > queues
213
+ correos: Pendientes=50, En proceso=0, Fallidas=0, Pausada=true
214
+ >
215
+ ```
216
+
217
+ Luego, cuando la carga disminuya, puedes reanudar:
218
+
219
+ ```
220
+ > queue-resume
221
+ Introduce el nombre de la cola:
222
+ > correos
223
+ ✅ Cola 'correos' reanudada exitosamente.
224
+ ```
225
+
226
+ ### Ejemplo 3: Manejo de tareas fallidas
227
+
228
+ Si una cola tiene tareas fallidas que deseas reintentar:
229
+
230
+ ```
231
+ > queues
232
+ pagos: Pendientes=0, En proceso=0, Fallidas=3, Pausada=false
233
+
234
+ > queue-retry-failed
235
+ Introduce el nombre de la cola:
236
+ > pagos
237
+ ✅ Reintento de tareas fallidas iniciado para la cola 'pagos'.
238
+
239
+ > queues
240
+ pagos: Pendientes=3, En proceso=0, Fallidas=0, Pausada=false
241
+ ```
242
+
243
+ ## Solución de Problemas
244
+
245
+ ### Problema: Comando no reconocido
246
+
247
+ **Síntoma**: El sistema responde con "Comando desconocido para el módulo de gestión de colas"
248
+
249
+ **Solución**: Verifica que estás usando uno de los comandos válidos: `queues`, `queue-info`, `queue-pause`, `queue-resume`, `queue-clear`, `queue-retry-failed`
250
+
251
+ ### Problema: Cola no encontrada
252
+
253
+ **Síntoma**: El sistema responde con "❌ Cola 'nombre' no encontrada."
254
+
255
+ **Solución**: Verifica que el nombre de la cola es correcto. Puedes usar el comando `queues` para ver la lista de colas disponibles.
256
+
257
+ ### Problema: Cola no responde
258
+
259
+ **Síntoma**: Las tareas no se procesan aunque la cola esté activa
260
+
261
+ **Solución**:
262
+ 1. Verifica el estado con `queues`
263
+ 2. Comprueba si la cola está pausada
264
+ 3. Verifica que el sistema de colas esté iniciado en la aplicación
265
+ 4. Revisa los logs de la aplicación para posibles errores
266
+
267
+ ### Problema: Tareas acumulándose
268
+
269
+ **Síntoma**: La cola tiene muchas tareas pendientes que no se procesan
270
+
271
+ **Soluciones posibles**:
272
+ 1. Aumenta la concurrencia de la cola en la configuración de la aplicación
273
+ 2. Pausa temporalmente la cola si hay sobrecarga: `queue-pause`
274
+ 3. Verifica que las tareas no estén fallando continuamente
275
+
276
+ ## Compatibilidad
277
+
278
+ - **Versión mínima del framework**: JERK 2.6.0
279
+ - **Puerto de administración**: Por defecto 9999 (configurable)
280
+ - **Acceso**: Solo desde localhost por razones de seguridad
281
+ - **Protocolo**: Conexión TCP con interfaz de línea de comandos
282
+
283
+ ## Autor
284
+
285
+ JERK Framework Team
286
+
287
+ ## Versión
288
+
289
+ v2.6.0
@@ -0,0 +1,320 @@
1
+ # Manual de Uso del Sistema de Colas para el Framework JERK
2
+
3
+ ## Tabla de Contenidos
4
+ 1. [Introducción](#introducción)
5
+ 2. [Características del Sistema de Colas](#características-del-sistema-de-colas)
6
+ 3. [Instalación y Configuración](#instalación-y-configuración)
7
+ 4. [Conceptos Básicos](#conceptos-básicos)
8
+ 5. [Uso Básico](#uso-básico)
9
+ 6. [Uso Avanzado](#uso-avanzado)
10
+ 7. [Hooks Personalizados](#hooks-personalizados)
11
+ 8. [Gestión de Errores y Reintentos](#gestión-de-errores-y-reintentos)
12
+ 9. [Ejemplos de Uso](#ejemplos-de-uso)
13
+
14
+ ## Introducción
15
+
16
+ El Sistema de Colas es una extensión del Framework JERK que permite la ejecución asíncrona de tareas en múltiples colas concurrentes. Este sistema es ideal para operaciones que consumen tiempo como procesamiento de imágenes, envío de correos electrónicos, procesamiento de pagos, y otras operaciones que no deben bloquear la respuesta inmediata a las solicitudes del usuario.
17
+
18
+ ## Características del Sistema de Colas
19
+
20
+ - **Soporte para N colas**: Puedes crear tantas colas como necesites, cada una con su propia configuración.
21
+ - **Concurrencia configurable**: Controla cuántas tareas se ejecutan simultáneamente por cola.
22
+ - **Hooks personalizados**: Personaliza la lógica de procesamiento y fallback para cada cola.
23
+ - **Sistema de reintentos**: Manejo automático de fallos con reintentos configurables.
24
+ - **Gestión de prioridades**: Asigna prioridades a las tareas para determinar su orden de ejecución.
25
+ - **Sistema de fallback**: Manejo de tareas que fallan definitivamente.
26
+ - **Totalmente asíncrono**: No bloquea el hilo principal de ejecución.
27
+
28
+ ## Instalación y Configuración
29
+
30
+ El Sistema de Colas ya está incluido en el Framework JERK a partir de la versión 2.6.0. Para usarlo:
31
+
32
+ ```javascript
33
+ const { QueueIntegration } = require('jerkjs');
34
+ ```
35
+
36
+ ## Conceptos Básicos
37
+
38
+ ### Cola
39
+ Una cola es una unidad lógica que agrupa tareas similares. Cada cola puede tener su propia configuración de concurrencia, reintentos y hooks personalizados.
40
+
41
+ ### Tarea
42
+ Una tarea es una función que encapsula la lógica que se va a ejecutar en segundo plano. Las tareas pueden ser asíncronas y devolver Promises.
43
+
44
+ ### Hook
45
+ Un hook es un punto de extensión que permite personalizar el comportamiento del sistema de colas, como la lógica de procesamiento de tareas o la lógica de fallback.
46
+
47
+ ## Uso Básico
48
+
49
+ ### 1. Crear una instancia del sistema de colas
50
+
51
+ ```javascript
52
+ const { QueueIntegration } = require('jerkjs');
53
+
54
+ // Crear una instancia de la integración de colas
55
+ const queueIntegration = new QueueIntegration();
56
+ ```
57
+
58
+ ### 2. Crear una cola simple
59
+
60
+ ```javascript
61
+ // Crear una cola con configuración por defecto
62
+ queueIntegration.createQueue('procesamiento-general', {
63
+ concurrency: 2, // Máximo 2 tareas ejecutándose simultáneamente
64
+ retryAttempts: 3, // Reintentar hasta 3 veces si falla
65
+ retryDelay: 1000 // Esperar 1 segundo entre reintentos
66
+ });
67
+ ```
68
+
69
+ ### 3. Agregar tareas a la cola
70
+
71
+ ```javascript
72
+ // Función que representa una tarea
73
+ function procesarDatos(datos, taskObj) {
74
+ return new Promise((resolve, reject) => {
75
+ // Simular procesamiento
76
+ setTimeout(() => {
77
+ console.log(`Procesando datos:`, datos);
78
+ resolve('Procesamiento completado');
79
+ }, 2000);
80
+ });
81
+ }
82
+
83
+ // Agregar una tarea a la cola
84
+ const taskId = queueIntegration.addTask(
85
+ 'procesamiento-general', // Nombre de la cola
86
+ procesarDatos, // Función de la tarea
87
+ { id: 1, nombre: 'dato1' }, // Datos para la tarea
88
+ 0 // Prioridad (0 es la más alta)
89
+ );
90
+ ```
91
+
92
+ ### 4. Iniciar el sistema de colas
93
+
94
+ ```javascript
95
+ // Iniciar la ejecución de tareas
96
+ queueIntegration.start();
97
+ ```
98
+
99
+ ## Uso Avanzado
100
+
101
+ ### Crear colas con hooks personalizados
102
+
103
+ ```javascript
104
+ const { HookSystem } = require('jerkjs');
105
+
106
+ // Crear un sistema de hooks específico para esta cola
107
+ const procesamientoImagenesHooks = new HookSystem();
108
+
109
+ // Hook para personalizar la lógica de procesamiento
110
+ procesamientoImagenesHooks.addAction('queue_execute_task', (task, queueName, taskObj) => {
111
+ console.log(`Preparando para procesar imagen: ${taskObj.id}`);
112
+
113
+ // Envolver la tarea original con lógica adicional
114
+ const wrappedTask = async (datos, taskObj) => {
115
+ console.log(`Iniciando procesamiento de imagen: ${taskObj.id}`);
116
+ try {
117
+ const result = await task(datos, taskObj);
118
+ console.log(`Imagen procesada exitosamente: ${taskObj.id}`);
119
+ return result;
120
+ } catch (error) {
121
+ console.log(`Error procesando imagen: ${taskObj.id} - ${error.message}`);
122
+ throw error;
123
+ }
124
+ };
125
+
126
+ return wrappedTask;
127
+ });
128
+
129
+ // Hook para manejar la lógica de fallback
130
+ procesamientoImagenesHooks.addAction('queue_task_fallback', (queueName, task, error) => {
131
+ console.log(`Ejecutando fallback para imagen:`, error.message);
132
+ // Lógica personalizada para manejar tareas que fallan definitivamente
133
+ });
134
+
135
+ // Crear la cola con hooks personalizados
136
+ queueIntegration.createQueue('imagenes', {
137
+ concurrency: 3,
138
+ retryAttempts: 2,
139
+ retryDelay: 1000
140
+ }, procesamientoImagenesHooks);
141
+ ```
142
+
143
+ ### Prioridades de tareas
144
+
145
+ Las tareas se pueden agregar con diferentes niveles de prioridad. Un valor más bajo indica una prioridad más alta:
146
+
147
+ ```javascript
148
+ // Tarea de alta prioridad (prioridad 0)
149
+ queueIntegration.addTask('imagenes', procesarImagen, { archivo: 'importante.jpg' }, 0);
150
+
151
+ // Tarea de prioridad media (prioridad 5)
152
+ queueIntegration.addTask('imagenes', procesarImagen, { archivo: 'normal.jpg' }, 5);
153
+
154
+ // Tarea de baja prioridad (prioridad 10)
155
+ queueIntegration.addTask('imagenes', procesarImagen, { archivo: 'opcional.jpg' }, 10);
156
+ ```
157
+
158
+ ## Hooks Personalizados
159
+
160
+ El sistema de colas proporciona varios puntos de extensión a través de hooks:
161
+
162
+ ### Hooks Disponibles
163
+
164
+ - `queue_execute_task`: Se ejecuta antes de procesar una tarea. Permite modificar la lógica de la tarea.
165
+ - `queue_task_completed`: Se ejecuta cuando una tarea se completa exitosamente.
166
+ - `queue_task_failed`: Se ejecuta cuando una tarea falla.
167
+ - `queue_task_retry`: Se ejecuta cuando una tarea se reintenta.
168
+ - `queue_task_fallback`: Se ejecuta cuando una tarea falla definitivamente después de todos los reintentos.
169
+ - `queue_task_added`: Se ejecuta cuando se agrega una tarea a la cola.
170
+ - `queue_system_started`: Se ejecuta cuando se inicia el sistema de colas.
171
+ - `queue_system_stopped`: Se ejecuta cuando se detiene el sistema de colas.
172
+
173
+ ### Ejemplo de hook personalizado
174
+
175
+ ```javascript
176
+ const misHooks = new HookSystem();
177
+
178
+ // Hook para registrar todas las tareas completadas
179
+ misHooks.addAction('queue_task_completed', (queueName, task) => {
180
+ console.log(`Tarea completada en cola ${queueName}:`, task.id);
181
+ });
182
+
183
+ // Hook para registrar errores
184
+ misHooks.addAction('queue_task_failed', (queueName, task, error) => {
185
+ console.log(`Tarea fallida en cola ${queueName}:`, task.id, error.message);
186
+ });
187
+ ```
188
+
189
+ ## Gestión de Errores y Reintentos
190
+
191
+ El sistema de colas incluye un mecanismo robusto para manejar errores:
192
+
193
+ ### Configuración de reintentos
194
+
195
+ ```javascript
196
+ queueIntegration.createQueue('procesamiento-confiable', {
197
+ retryAttempts: 5, // Número máximo de reintentos
198
+ retryDelay: 2000 // Milisegundos de espera entre reintentos
199
+ });
200
+ ```
201
+
202
+ ### Lógica de fallback
203
+
204
+ Cuando una tarea falla después de todos los reintentos, se ejecuta la lógica de fallback:
205
+
206
+ ```javascript
207
+ const hooks = new HookSystem();
208
+
209
+ hooks.addAction('queue_task_fallback', (queueName, task, error) => {
210
+ // Aquí puedes implementar lógica personalizada para manejar tareas fallidas
211
+ console.log(`Tarea fallida definitivamente:`, task.id);
212
+ console.log(`Error:`, error.message);
213
+
214
+ // Por ejemplo, guardar en una base de datos para procesamiento manual
215
+ // o enviar una alerta al equipo de soporte
216
+ });
217
+ ```
218
+
219
+ ## Ejemplos de Uso
220
+
221
+ ### Ejemplo completo: Procesamiento de imágenes
222
+
223
+ ```javascript
224
+ const { QueueIntegration, HookSystem } = require('jerkjs');
225
+
226
+ // Crear instancia del sistema de colas
227
+ const queueIntegration = new QueueIntegration();
228
+
229
+ // Configurar cola de imágenes con hooks personalizados
230
+ const imagenHooks = new HookSystem();
231
+
232
+ imagenHooks.addAction('queue_execute_task', (task, queueName, taskObj) => {
233
+ console.log(`[IMAGEN] Preparando para procesar: ${taskObj.id}`);
234
+ return task;
235
+ });
236
+
237
+ imagenHooks.addAction('queue_task_fallback', (queueName, task, error) => {
238
+ console.log(`[IMAGEN] Error definitivo:`, error.message);
239
+ });
240
+
241
+ queueIntegration.createQueue('imagenes', {
242
+ concurrency: 3,
243
+ retryAttempts: 2,
244
+ retryDelay: 1000
245
+ }, imagenHooks);
246
+
247
+ // Función de tarea para procesamiento de imágenes
248
+ function procesarImagen(datos, taskObj) {
249
+ return new Promise((resolve, reject) => {
250
+ console.log(`[IMAGEN] Procesando: ${datos.nombreArchivo}`);
251
+
252
+ // Simular procesamiento
253
+ setTimeout(() => {
254
+ if (Math.random() < 0.2) { // 20% de fallos
255
+ reject(new Error(`Error procesando ${datos.nombreArchivo}`));
256
+ } else {
257
+ console.log(`[IMAGEN] Completado: ${datos.nombreArchivo}`);
258
+ resolve(`Imagen ${datos.nombreArchivo} procesada`);
259
+ }
260
+ }, 2000);
261
+ });
262
+ }
263
+
264
+ // Agregar tareas
265
+ for (let i = 0; i < 5; i++) {
266
+ queueIntegration.addTask('imagenes', procesarImagen, {
267
+ id: i,
268
+ nombreArchivo: `imagen_${i}.jpg`
269
+ }, i);
270
+ }
271
+
272
+ // Iniciar el sistema
273
+ queueIntegration.start();
274
+
275
+ // Verificar estado periódicamente
276
+ setInterval(() => {
277
+ console.log('Estado:', queueIntegration.getStatus());
278
+ }, 5000);
279
+ ```
280
+
281
+ ### Ejemplo: Envío de correos electrónicos
282
+
283
+ ```javascript
284
+ // Cola para envío de correos
285
+ queueIntegration.createQueue('correos', {
286
+ concurrency: 2, // Máximo 2 envíos simultáneos
287
+ retryAttempts: 3, // Reintentar hasta 3 veces
288
+ retryDelay: 2000 // Esperar 2 segundos entre reintentos
289
+ });
290
+
291
+ function enviarCorreo(datos, taskObj) {
292
+ return new Promise((resolve, reject) => {
293
+ console.log(`Enviando correo a: ${datos.destinatario}`);
294
+
295
+ // Simular envío de correo
296
+ setTimeout(() => {
297
+ if (Math.random() < 0.15) { // 15% de fallos
298
+ reject(new Error(`Fallo al enviar correo a ${datos.destinatario}`));
299
+ } else {
300
+ console.log(`Correo enviado a: ${datos.destinatario}`);
301
+ resolve(`Correo enviado a ${datos.destinatario}`);
302
+ }
303
+ }, 1500);
304
+ });
305
+ }
306
+
307
+ // Agregar tareas de correo
308
+ const destinatarios = ['usuario1@example.com', 'usuario2@example.com', 'usuario3@example.com'];
309
+ destinatarios.forEach((destinatario, index) => {
310
+ queueIntegration.addTask('correos', enviarCorreo, {
311
+ destinatario: destinatario,
312
+ asunto: 'Correo de prueba',
313
+ contenido: 'Contenido del correo'
314
+ }, index);
315
+ });
316
+ ```
317
+
318
+ ## Conclusión
319
+
320
+ El Sistema de Colas del Framework JERK proporciona una solución robusta y flexible para la ejecución asíncrona de tareas. Con soporte para múltiples colas, configuración de concurrencia, hooks personalizados y manejo de errores, es ideal para aplicaciones que requieren procesamiento en segundo plano sin bloquear la respuesta a las solicitudes del usuario.