async

$npx mdskill add TheBeardedBearSAS/claude-craft/async

Optimize async processing for efficient and reliable background tasks

  • Identify and offload long-running operations to background workers.
  • Use Symfony Messenger, Laravel Queue, or Ecotone for message-based asynchronous processing.
  • Automatically route messages to appropriate worker based on job type.
  • Monitor performance with logs, metrics, and alerts for optimal system health.

SKILL.md

.github/skills/asyncView on GitHub ↗
---
name: async
description: Architecture async-first avec messaging et queues (Symfony Messenger, Laravel Queue, Ecotone). Use when working with async processing, queues, workers, background jobs.
context: fork
triggers:
  files: ["config/packages/messenger.yaml", "config/queue.php", "app/Jobs/**", "src/Message/**", "src/MessageHandler/**"]
  keywords: ["async", "queue", "worker", "messenger", "job", "background", "message", "handler", "dispatch", "consume"]
auto_suggest: true
disable-model-invocation: true
---

# Async-First — Quick Reference

Décharger les traitements > 200 ms vers des workers en arrière-plan, pour garder l'UI/API réactives.

## Quand activer l'async

| Cas | Async ? |
|-----|---------|
| Envoi d'email transactionnel | ✅ |
| Génération PDF / export CSV | ✅ |
| Appel API tierce > 200 ms | ✅ |
| Traitement batch nocturne | ✅ |
| Lecture base de données triviale | ❌ |

## Cinq invariants non-négociables

1. **HTTP < 200 ms.** Toute opération qui dépasse ce seuil doit être déportée.
2. **Idempotence obligatoire.** Un message peut être rejoué — concevoir comme tel (idempotency keys, dedupe).
3. **Retry + Dead Letter Queue.** 3 tentatives, backoff exponentiel + jitter. Au-delà → DLQ + alerte.
4. **Competing consumers.** 4-8 workers en parallèle pour absorber les pics.
5. **Lifecycle tracking.** Logs structurés, métriques (latence, taux erreur, DLQ depth) et alertes.

## Frameworks recommandés

| Stack | Framework | Notes |
|-------|-----------|-------|
| Symfony | **Symfony Messenger** | Transport AMQP, Redis, Doctrine ; supports Stamps |
| Laravel | **Laravel Queue** (Horizon en prod) | Backed by Redis ou SQS ; supervision native |
| PHP framework-agnostic | **Ecotone** | DDD, sagas, scheduler, messaging unifié |
| Node.js | BullMQ ou RabbitMQ | Redis-backed avec dashboard |

## Pattern minimal (Symfony Messenger)

```php
// Message (immutable DTO)
final class SendWelcomeEmail
{
    public function __construct(public readonly string $userId) {}
}

// Handler
final class SendWelcomeEmailHandler
{
    public function __invoke(SendWelcomeEmail $message): void
    {
        // Idempotency check
        if ($this->emailLog->wasSent($message->userId, 'welcome')) {
            return;
        }
        $this->mailer->sendWelcome($message->userId);
        $this->emailLog->record($message->userId, 'welcome');
    }
}

// Dispatch (controller)
$this->bus->dispatch(new SendWelcomeEmail($user->id));
```

## Anti-patterns critiques

- ❌ Mettre une opération idempotente directement dans le handler sans clé d'idempotency (replay = double effet).
- ❌ `try { ... } catch (\Throwable) { /* swallow */ }` dans un handler → le message est marqué traité alors qu'il a échoué.
- ❌ Stocker la payload complète d'un email/PDF dans le message → préférer un ID + lookup, sinon RabbitMQ explose.
- ❌ Pas de circuit breaker autour des appels tiers : un provider down fait monter la DLQ en flèche.

## Pour aller plus loin

> Détails complets, patterns Laravel/Ecotone, exemples de configuration, observabilité OpenTelemetry, lifecycle events, checklists par phase : voir `@.claude/skills/async/REFERENCE.md`.

More from TheBeardedBearSAS/claude-craft

SkillDescription
adapter-developmentErstellen Sie eine Paperclip-Extension — ein Plugin via @paperclipai/plugin-sdk oder einen Built-in-Adapter unter packages/adapters. Verwenden Sie dies beim Hinzufügen von AI-Runtimes oder Feature-Plugins.
aggregatesRègle 05 : Aggregates et Aggregate Roots. Use when implementing DDD patterns.
architecture-clean-dddArchitecture Clean + DDD + Hexagonal - Atoll Tourisme. Use when designing architecture or reviewing code structure.
architecture-paperclipPaperclip-Two-Layer-Architektur (Control-Plane + Adapter). Verwenden Sie dies beim Entwerfen oder Reviewen von Paperclip-Modul-/Adapter-Grenzen.
atomic-tasksPattern GSD (Get Shit Done) - découper en tâches atomiques avec contextes subagent frais pour combattre le context rot. Use when planning complex work or working past 50% context usage.
coding-standards-tsPaperclip-TypeScript-Coding-Standards — Strict-Modus, Kebab-Files, kein any, strukturierte Logs. Verwenden Sie dies beim Schreiben oder Reviewen von Paperclip-TS-Code.
cqrsCQRS - Command Query Responsibility Segregation. Use when implementing DDD patterns, separating read/write models, event sourcing, or building scalable architectures with heterogeneous performance requirements.
ddd-patternsPatterns DDD - Atoll Tourisme. Use when implementing DDD patterns.
debug-methodicalDebugging méthodique en 4 phases (reproduce → isolate → fix → verify). Use when investigating a bug, regression, flaky test, or unexpected behavior.
design-md-conventionConvention DESIGN.md pour design systems AI-friendly. Use when setting up a new project UI, documenting design tokens, or generating UI consistent with a design system.