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.
- package/CHANGELOG.md +167 -79
- package/README.md +134 -146
- package/RESULTADOS_WAF.md +63 -0
- package/doc-2.5/ADMIN_EXTENSION_COMMANDS_MANUAL.md +261 -0
- package/doc-2.5/ADMIN_EXTENSION_HOOK_EXAMPLE.md +28 -0
- package/doc-2.5/ADMIN_EXTENSION_INTEGRATION_MANUAL.md +232 -0
- package/doc-2.5/CACHE_SYSTEM_MAP.md +206 -0
- package/doc-2.5/MANUAL_MODULOS_ADMIN.md +287 -0
- package/doc-2.5/QUEUE_CLI_MODULE_MANUAL.md +289 -0
- package/doc-2.5/QUEUE_SYSTEM_MANUAL.md +320 -0
- package/doc-2.5/ROUTE_CACHE_MODULE_MANUAL.md +205 -0
- package/doc-2.5/WAF_MODULE_MANUAL.md +229 -0
- package/index.js +19 -4
- package/jerk-admin-client/README.md +69 -0
- package/jerk-admin-client/package.json +23 -0
- package/jerk-admin-client.js +257 -0
- package/lib/admin/AdminExtension.js +491 -0
- package/lib/admin/ModuleLoader.js +77 -0
- package/lib/admin/config.js +21 -0
- package/lib/admin/modules/CacheModule.js +145 -0
- package/lib/admin/modules/ControllerGeneratorModule.js +414 -0
- package/lib/admin/modules/QueueManagementModule.js +265 -0
- package/lib/admin/modules/RouteCacheModule.js +227 -0
- package/lib/admin/modules/RouteManagerModule.js +468 -0
- package/lib/admin/modules/STATS_MODULE_README.md +113 -0
- package/lib/admin/modules/StatsModule.js +140 -0
- package/lib/admin/modules/SystemModule.js +140 -0
- package/lib/admin/modules/TimeModule.js +95 -0
- package/lib/admin/modules/ViewCacheStatsModule.js +92 -0
- package/lib/admin/modules/WAFModule.js +737 -0
- package/lib/cache/CacheHooks.js +141 -0
- package/lib/core/server.js +223 -77
- package/lib/middleware/firewall.js +112 -17
- package/lib/mvc/viewEngine.js +89 -5
- package/lib/queue/GlobalQueueStorage.js +38 -0
- package/lib/queue/QueueSystem.js +451 -0
- package/lib/queue/admin_example.js +114 -0
- package/lib/queue/example.js +268 -0
- package/lib/queue/integration.js +109 -0
- package/lib/router/RouteMatcher.js +242 -54
- package/lib/utils/globalStats.js +16 -0
- package/lib/utils/globalViewCacheInfo.js +16 -0
- package/lib/utils/globalWAFStats.js +54 -0
- package/package.json +2 -2
- package/test-colors.js +46 -0
- 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.
|