Receber por email
← Voltar para o catálogo

symfony-hexagonal-skill

Symfony Messenger async processing — message queues, retry strategies, failure transport, Symfony Scheduler, idempotency patterns, background jobs. Triggers on: messenger, async, queue, retry, scheduler, background job, worker, transport, message queue, cron, scheduled task

31estrelas
Atualizado há 7 meses

Ver no GitHub ↗

Como adicionar

/plugin marketplace add aligundogdu/symfony-hexagonal-skill

O comando exato pode variar conforme o repositório. Confira o README no GitHub.

Para o autor da skill

Cole no README do seu repo

Mostra que sua skill está catalogada na Skillteca, gera backlink e tráfego rastreável.

[![Skillteca](https://www.skillteca.com.br/api/badge/symfony-hexagonal-skill-mpsy79qi/svg)](https://www.skillteca.com.br/skills/symfony-hexagonal-skill-mpsy79qi)
#ai

Skills relacionadas

Ver todas de Desenvolvimento →

Alerta por categoria

Receba novas skills de Desenvolvimento toda segunda

1 email curto, só com as skills novas de Desenvolvimento. 4 minutos de leitura, sem spam, cancela com 1 clique.

Você confirma o email no primeiro envio. Sem spam. Cancela com 1 clique.

Ler descrição completa

Symfony Messenger & Async Processing

You are an expert in async message processing with Symfony Messenger within hexagonal architecture.

When to Activate

  • User needs async processing or background jobs
  • User asks about message queues or retry strategies
  • User mentions cron jobs (redirect to Scheduler)
  • User needs idempotency or failure handling
  • User asks about Symfony Scheduler

Core Principle: No Cron Jobs

Never use raw cron. Always use:

  • Symfony Messenger for async message processing
  • Symfony Scheduler for recurring tasks

Async Command Pattern

// The command is the same — async is a routing concern, not a code concern
namespace App\Application\Report\Command;

final readonly class GenerateReport
{
    public function __construct(
        public string $reportId,
        public string $userId,
        public string $type,
    ) {
    }
}

// Handler is identical to sync — the bus handles async dispatch
#[AsMessageHandler(bus: 'command.bus')]
final readonly class GenerateReportHandler
{
    public function __invoke(GenerateReport $command): void
    {
        // Long-running operation
    }
}
# Route to async transport
framework:
    messenger:
        routing:
            'App\Application\Report\Command\GenerateReport': async

Idempotency

Every async handler MUST be idempotent — safe to retry:

#[AsMessageHandler(bus: 'command.bus')]
final readonly class ProcessPaymentHandler
{
    public function __construct(
        private PaymentRepositoryInterface $paymentRepository,
        private PaymentGatewayInterface $paymentGateway,
    ) {
    }

    public function __invoke(ProcessPayment $command): void
    {
        // Check if already processed (idempotency)
        $existing = $this->paymentRepository->findByIdempotencyKey($command->idempotencyKey);
        if ($existing !== null) {
            return; // Already processed, skip
        }

        // Process payment
        $result = $this->paymentGateway->charge($command->customerId, $command->amount);
        $this->paymentRepository->save($result);
    }
}

References

See references/ for detailed guides:

  • messenger-config.md — Full Messenger YAML configuration
  • idempotency-patterns.md — Idempotency key strategies
  • scheduler-patterns.md — Symfony Scheduler setup and patterns
Compartilhar X LinkedIn