> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# laravel/symfony-on-cloud — faire tourner une application Symfony sur Laravel Cloud

> Analyse d'un nouveau dépôt officiel Laravel. Découvrez ce bundle Symfony officiel qui permet d'utiliser les queues managées Symfony Messenger sur Laravel Cloud.

<Info>
  Cet article est une analyse initiale à la date de juin 2026. `laravel/symfony-on-cloud` est un dépôt en développement ; d'autres fonctionnalités doivent suivre.
</Info>

## Qu'est-ce que laravel/symfony-on-cloud ?

[laravel/symfony-on-cloud](https://github.com/laravel/symfony-on-cloud) est un **bundle Symfony officiel** qui apporte les fonctionnalités de Laravel Cloud aux applications Symfony. Il s'agit d'un dépôt très récent, publié le 27 juin 2026.

```mermaid theme={null}
flowchart LR
    A["Application Symfony"] --> B["Bundle<br>laravel/symfony-on-cloud"]
    B --> C["Queues managées<br>Laravel Cloud"]
    C --> D["AWS SQS"]
    C --> E["Métriques dans le<br>dashboard Cloud"]
```

Laravel Cloud était jusqu'ici réservé aux applications Laravel ; ce package permet aux **développeurs Symfony d'exploiter l'infrastructure de Laravel Cloud (queues managées, etc.)**.

La première fonctionnalité est une **queue managée basée sur Symfony Messenger**. Le README indique « more Laravel Cloud capabilities will follow », d'autres fonctionnalités que la queue sont donc prévues.

## Installation

```bash theme={null}
composer require laravel/symfony-on-cloud
```

Enregistrez ensuite le bundle dans `config/bundles.php` (la recette Symfony Flex n'étant pas encore prise en charge, l'ajout est manuel).

```php theme={null}
return [
    // ...
    Laravel\Cloud\Symfony\LaravelCloudBundle::class => ['all' => true],
];
```

## Queues managées

### Configuration de base

Le bundle fournit un transport prêt à l'emploi appelé `cloud`. Sur Laravel Cloud, la configuration de connexion est injectée automatiquement — pas besoin de renseigner un DSN à la main.

```yaml theme={null}
# config/packages/messenger.yaml
framework:
    messenger:
        routing:
            '*': cloud
```

<Tip>
  La migration d'une application Symfony Messenger existante vers Laravel Cloud est également simple. Cloud injecte automatiquement `MESSENGER_TRANSPORT_DSN=laravel-cloud://managed-queue`, ce qui permet aux applications utilisant le transport `async` classique (`dsn: '%env(MESSENGER_TRANSPORT_DSN)%'`) de fonctionner sans changement de code.
</Tip>

### Plusieurs queues

Sur Laravel Cloud, vous pouvez créer plusieurs queues managées (par exemple `default` et `critical`). Chaque queue fonctionne avec une queue SQS et des workers indépendants. Utilisez `CloudQueueStamp` pour dispatcher vers une queue spécifique.

```php theme={null}
use Laravel\Cloud\Symfony\Queue\Messenger\CloudQueueStamp;
use Symfony\Component\Messenger\MessageBusInterface;

$bus->dispatch(new ProcessReport($report), [new CloudQueueStamp('critical')]);
```

Sans stamp, le message part vers la queue par défaut.

### Queues FIFO

Les queues managées dont le nom se termine par `.fifo` sont traitées comme des [queues FIFO](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues.html) : livraison stricte dans l'ordre et déduplication.

```php theme={null}
use Laravel\Cloud\Symfony\Queue\Messenger\CloudQueueStamp;

$bus->dispatch(new ProcessOrder($order), [new CloudQueueStamp('orders.fifo')]);
```

Par défaut, l'ID de groupe est le nom de la queue et l'ID de déduplication est une valeur unique. Pour un contrôle plus fin, ajoutez `CloudFifoStamp`.

```php theme={null}
use Laravel\Cloud\Symfony\Queue\Messenger\CloudFifoStamp;
use Laravel\Cloud\Symfony\Queue\Messenger\CloudQueueStamp;

$bus->dispatch(new ProcessOrder($order), [
    new CloudQueueStamp('orders.fifo'),
    new CloudFifoStamp(
        messageGroupId: 'customer-'.$order->customerId,
        messageDeduplicationId: 'order-'.$order->id,
    ),
]);
```

### Queues « fair »

Les [queues fair de SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-fair-queues.html) permettent qu'un locataire injectant beaucoup de jobs ne pénalise pas les autres. En attribuant un ID de groupe sur une queue standard, SQS répartit équitablement la capacité entre locataires.

```php theme={null}
use Laravel\Cloud\Symfony\Queue\Messenger\CloudMessageGroupStamp;
use Laravel\Cloud\Symfony\Queue\Messenger\CloudQueueStamp;

$bus->dispatch(new ProcessOrder($order), [
    new CloudQueueStamp('orders'),
    new CloudMessageGroupStamp('customer-'.$order->customerId),
]);
```

<Info>
  `CloudMessageGroupStamp` est réservé aux **queues standard** et n'est pas utilisable en FIFO. Pour désigner un groupe sur une queue FIFO, utilisez `CloudFifoStamp`.
</Info>

### Différer

`DelayStamp` permet de retarder l'envoi sur une queue standard. Attention à la limite SQS de **15 minutes maximum**. Au-delà, une erreur est levée (il n'y a pas de bascule silencieuse à 15 minutes).

Les queues FIFO ne supportent pas le délai : `DelayStamp` lève directement une erreur.

### Retry

Si le handler échoue, le bundle remet le message dans SQS, qui le redistribue via le visibility timeout. On peut ainsi attendre jusqu'à la limite du visibility timeout SQS (**12 heures**) plutôt que la limite d'envoi (15 minutes).

Utilisez la configuration standard `retry_strategy` de Symfony Messenger.

```yaml theme={null}
# config/packages/messenger.yaml
framework:
    messenger:
        transports:
            cloud:
                retry_strategy:
                    max_retries: 3    # 3 retries (4 exécutions au total)
                    delay: 1000       # Backoff initial (ms)
                    multiplier: 2     # Multiplicateur de backoff
                    max_delay: 0      # Pas de plafond (la limite SQS 12 h s'applique)
```

Les exceptions implémentant `UnrecoverableExceptionInterface` sont marquées en échec immédiatement, sans nouvelle tentative.

## Développement local

Le transport `cloud` peut être remplacé côté application. En local, `sync://` exécute les jobs immédiatement.

```yaml theme={null}
# config/packages/messenger.yaml
when@dev:
    framework:
        messenger:
            transports:
                cloud: 'sync://'
```

Pour désactiver totalement la fonctionnalité : `laravel_cloud.queue.enabled: false`.

## Conclusion

`laravel/symfony-on-cloud` est un bundle officiel qui rend l'infrastructure Laravel Cloud utilisable depuis des applications Symfony. La première brique — la **queue managée** — offre déjà : intégration Symfony Messenger, queues multiples, FIFO / fair, configuration de retry, etc.

| Stamp                    | Rôle                                                    |
| ------------------------ | ------------------------------------------------------- |
| `CloudQueueStamp`        | Dispatch vers une queue spécifique                      |
| `CloudFifoStamp`         | Contrôle de l'ordre et de la déduplication pour FIFO    |
| `CloudMessageGroupStamp` | Répartition équitable en queue standard (clé de tenant) |

D'après le README, d'autres fonctionnalités Cloud viendront s'ajouter. Si l'exécution d'applications Symfony sur Laravel Cloud se démocratise, ce package deviendra très précieux.

## Liens

<CardGroup cols={2}>
  <Card title="laravel/symfony-on-cloud" icon="github" href="https://github.com/laravel/symfony-on-cloud">
    Dépôt officiel et README
  </Card>

  <Card title="Laravel Cloud" icon="cloud" href="https://laravel.com/cloud">
    Site officiel de Laravel Cloud
  </Card>

  <Card title="Symfony Messenger" icon="envelope" href="https://symfony.com/doc/current/messenger.html">
    Documentation officielle Symfony Messenger
  </Card>

  <Card title="Documentation Laravel Cloud" icon="book" href="https://cloud.laravel.com/docs/intro">
    Documentation détaillée Laravel Cloud
  </Card>
</CardGroup>


## Related topics

- [Cloud Sessions](/fr/packages/laravel-copilot-sdk/cloud-sessions.md)
- [Laravel Cloud — le PaaS dédié à Laravel](/fr/blog/laravel-cloud.md)
- [Laravel Cloud Hibernation (mise en veille automatique)](/fr/blog/laravel-cloud-hibernation.md)
- [Mises à jour Laravel — juin 2026](/fr/blog/changelog/202606.md)
- [Mise à niveau de Laravel 8 vers 9](/fr/blog/upgrade-8-to-9.md)
