# Workers

Source : https://webgune.cloud/es-es/docs/workers · Mis à jour le 2026-10-27

# Workers

Un **worker** es un servicio sin puerto ni dominio: un proceso de fondo que consume una cola, ejecuta tareas programadas o procesa datos de forma continua.

## Cuándo elegir un worker

- Consumir una cola (BullMQ, RabbitMQ, o una simple lista de [Redis](/docs/db-redis)).
- Tareas recurrentes (envío de correos, sincronización, limpieza).
- Procesamiento largo que no debe bloquear tu aplicación web (generación de PDF, importaciones).

## Crear un worker

1. **+ Nuevo servicio** → tipo **Worker**.
2. Conecta el repositorio (o la imagen Docker) que contiene el código.
3. Define si es necesario un [comando de inicio](/docs/commande-demarrage) dedicado. Es útil cuando el worker vive en el mismo repositorio que la aplicación web:

```bash
node dist/worker.js
```

## Ejemplo: consumir una cola Redis

```typescript
import Redis from "ioredis";

const redis = new Redis(process.env.REDIS_URL!);

while (true) {
  // BRPOP bloquea hasta que llega un job
  const [, payload] = await redis.brpop("jobs:emails", 0);
  await sendEmail(JSON.parse(payload));
}
```

El servicio web añade los jobs (`LPUSH jobs:emails …`), el worker los retira: ambos servicios comparten la misma instancia Redis del proyecto, conectada mediante sus variables de entorno.

## Buenas prácticas

- **Un worker = una responsabilidad.** Dos colas muy diferentes merecen dos workers: cada uno escala y se reinicia de forma independiente.
- Gestiona el apagado correctamente: al recibir `SIGTERM`, termina el job en curso antes de salir. Los redespliegues reemplazan el proceso.
- Idempotencia: un job puede reprocesarse tras un reinicio; asegúrate de que un procesamiento doble no tenga efecto.

Los logs y métricas (CPU/memoria) del worker están disponibles como en cualquier otro servicio en las pestañas **Logs** y **Observabilidad**.
