(16) 981791110 contato@policast.studio

O que é o RabbitMQ?

O RabbitMQ é um sistema de mensagens de código aberto que é usado como intermediário para aplicativos baseados em microserviços. Ele é usado para transferir dados entre diferentes aplicativos, servidores e plataformas.

Por que integrar o Symfony com o RabbitMQ?

Integrar o Symfony com o RabbitMQ pode trazer vários benefícios para o seu projeto, incluindo:

  • Melhorar a escalabilidade, permitindo que o Symfony se comunique de maneira eficiente com outros serviços, aplicativos e plataformas usando o RabbitMQ.
  • Melhorar a resiliência do sistema, possibilitando que as tarefas sejam realizadas automaticamente em caso de falhas técnicas.
  • Otimizar a performance e a velocidade do seu sistema, permitindo que as solicitações sejam tratadas de forma assíncrona.

Como integrar o Symfony com o RabbitMQ?

Para integrar o Symfony com o RabbitMQ, siga os seguintes passos:

  1. Baixe e instale o pacote AMQP do RabbitMQ.
  2. https://github.com/php-amqp/php-amqp

    Este pacote é uma extensão PHP que fornece uma camada de abstração para a biblioteca C RabbitMQ

  3. Configure o serviço do RabbitMQ no Symfony
  4. Para fazer isso, você pode definir o serviço do RabbitMQ no arquivo de serviços do Symfony. Para isso, você deve definir o host, o usuário, a senha e o nome da fila. Por exemplo:


    services:
    rabbitmq.connection:
    class: SymfonyComponentMessengerTransportAmqpExtConnection
    arguments:
    $dsn: 'amqp://guest:**password**@localhost:5672/%2f/messages'

    Neste exemplo, o serviço do RabbitMQ está definido com o nome de rabbitmq.connection e o host é definido como localhost.

  5. Crie o arquivo de configuração para o RabbitMQ
  6. Para fazer isso, você deve definir o tipo de intercâmbio, a fila e a tabela dead-letter. Por exemplo:


    framework:
    messenger:
    failure_transport: failed
    transports:
    async:
    dsn: '%env(RABBITMQ_URL)%'
    exchange: exchange_name
    queue: queue_name
    dead_letter_exchange: dead_letter_exchange_name

    Neste exemplo, o nome do intercâmbio é exchange_name, o nome da fila é queue_name e o nome da tabela dead-letter é dead_letter_exchange_name.

  7. Crie o controlador
  8. Para criar o controlador, você deve implementar o serviço da fila de mensagens e o arquivo de mensagem. Por exemplo:


    use SymfonyComponentMessengerMessageBusInterface;
    use AppMessageEmailNotification;

    class EmailController extends AbstractController
    {
    /**
    * @Route("/email")
    */
    public function sendEmail(MessageBusInterface $bus)
    {
    $email = new EmailNotification('hello@example.com', 'Welcome!');
    $bus->dispatch($email); // send the message
    return new Response('Email sent!');
    }
    }

    class EmailNotification
    {
    private $to;
    private $message;

    public function __construct(string $to, string $message)
    {
    $this->to = $to;
    $this->message = $message;
    }

    public function getTo(): string
    {
    return $this->to;
    }

    public function getMessage(): string
    {
    return $this->message;
    }
    }

    Neste exemplo, um email é enviado ao endereço de e-mail especificado.

  9. Crie o consumidor de filas
  10. Para criar o consumidor de filas, você deve criar o arquivo de classe do consumidor de filas e registrar o arquivo de classe do consumidor de filas no serviço da fila de mensagens. Por exemplo:


    use SymfonyComponentMessengerHandlerMessageHandlerInterface;
    use AppMessageEmailNotification;

    class EmailNotificationHandler implements MessageHandlerInterface
    {
    public function __invoke(EmailNotification $email)
    {
    mail($email->getTo(), 'Subject', $email->getMessage());
    }
    }

    services:
    AppMessageEmailNotificationHandler:
    autowire: true

    Neste exemplo, a mensagem é processada pelo arquivo de classe do consumidor de filas

  11. Inicie o consumidor de filas
  12. Para iniciar o consumidor de filas, você deve executar o seguinte comando:


    bin/console messenger:consume async

    Neste exemplo, o comando ‘messenger:consume’ é executado para iniciar o consumidor de filas.

  13. Execute o código
  14. Depois de cumprir as etapas listadas acima, execute o código para enviar uma mensagem de email através da fila de mensagens.

Com esses passos, você deverá conseguir integrar o Symfony com o RabbitMQ e implementar um sistema de filas de mensagens robusto.