E-Mails senden, PDFs generieren, Bilder verarbeiten — das gehört nicht in einen HTTP-Request. Eine Job Queue löst das.
Celery (Python)¶
tasks.py¶
from celery import Celery app = Celery(‘tasks’, broker=’redis://localhost:6379’) @app.task def send_email(to, subject, body):
Langsame Operation — läuft auf dem Worker, nicht im Request¶
smtp.send(to, subject, body)
Aufruf¶
send_email.delay(“[email protected]”, “Welcome”, “Hello!”) send_email.apply_async(args=[…], countdown=60) # In 60s
BullMQ (Node.js)¶
import { Queue, Worker } from ‘bullmq’; const queue = new Queue(‘emails’, { connection: redis }); await queue.add(‘welcome’, { to: ‘[email protected]’ }); const worker = new Worker(‘emails’, async (job) => { await sendEmail(job.data.to, ‘Welcome’); }, { connection: redis });
Wann eine Queue verwenden¶
- Operationen > 500ms
- E-Mail, SMS, Push-Benachrichtigungen
- Report- und PDF-Generierung
- Bild-/Videoverarbeitung
- Webhooks, Integrationen
Wichtigste Erkenntnis¶
Queue für alles, was > 500ms dauert. Celery für Python, BullMQ für Node.js. Redis als Broker.