Nuevo en Symfony 4.3: Mejoras en la gestión de errores de Messenger

El componente Messenger incluye un mecanismo de reenvío de mensajes en caso de error. En Symfony 4.3 hemos mejorado esta funcionalidad para añadir un trasporte especial para los mensajes que no se han podido enviar. De esta forma, podrás recolectar todos los errores en un único lugar para después volver a intentar el reenvío de los mensajes fallados.

Lo único que necesitas es configurar algo como lo siguiente en tu aplicación:

framework:
    messenger:
        failure_transport: failed

        transports:
            async:
                dsn: 'amqp://'
            failed:
                dsn: 'doctrine://default?queue_name=failed'

        routing:
            'App\Message\SmsNotification': async

En este ejemplo, el envío de SmsNotification se reintenta hasta un máximo de tres veces con el transporte async y en caso de más errores, se envía al otro transporte llamado failed. Este último transporte puede ser consumido como cualquier otro transporte:

$ php bin/console messenger:failed:show
 
  There are 3 messages waiting in the failed transport.
 
  ---  ---------------------------  -------------------  -----
  Id   Class                        Failed at            Error
  ---  ---------------------------  -------------------  -----
  217  App\Message\SmsNotification  2019-04-10 22:12:01  ...
  218  App\Message\SmsNotification  2019-04-10 22:12:00  ...
  219  App\Message\SmsNotification  2019-04-10 22:11:59  ...
  ---  ---------------------------  -------------------  -----
 
  // Run "messenger:failed:show {id} -vv" to see message details
$ php bin/console messenger:failed:show 217
 
  There are 3 messages waiting in the failed transport.
 
  -----------  ---------------------------
  Class        App\Message\SmsNotification
  Message Id   217
  Failed at    2019-04-10 22:12:01
  Error        ...
  Error Class  Exception
  Transport    async
  -----------  ---------------------------
 
  Re-run command with "-vv" to see more message & error details.
 
  Run "messenger:failed:retry 217" to retry this message.
  Run "messenger:failed:purge 217" to delete it.

Esta funcionalidad fue contribuida por Ryan Weaver en el pull request #30970.

Fuente: New in Symfony 4.3: Messenger failure transport

Comentarios

Publicada el

18 de junio de 2019

Etiquetas

Proyectos Symfony destacados

La forma más sencilla de generar el backend de tus aplicaciones Symfony. Ver más

Síguenos en @symfony_es para acceder a las últimas noticias.