O que é o Symfony Messenger?
O Symfony Messenger é um dos componentes da famosa framework Symfony que serve para criar arquiteturas de sistema baseadas em fila de mensagens. Na prática, isso significa que os processos do sistema podem ser colocados em fila e executados em segundo plano, liberando o processo principal para executar outras tarefas.
Por que usar o Symfony Messenger?
Existem diversas situações em que é interessante utilizar o Symfony Messenger. Por exemplo, quando o sistema precisa processar muitas tarefas em segundo plano, como enviar e-mails, atualizar informações em outras APIs ou realizar operações em bancos de dados. Nesses casos, colocar as tarefas em fila de mensagens é vantajoso porque permite que o sistema continue em funcionamento, sem ser sobrecarregado com a execução de tarefas assíncronas.
Como utilizar o Symfony Messenger?
Para utilizar o Symfony Messenger, é necessário instalar o componente através do Composer. Para isso, basta executar o comando:
composer require symfony/messenger
Em seguida, é preciso configurar a aplicação, incluindo a definição das filas de mensagens e dos processos de execução. Isso pode ser feito no arquivo config/packages/messenger.yaml
. Por exemplo, para criar uma fila de mensagens para envio de e-mails, é possível definir a seguinte configuração:
framework:
messenger:
routing:
'AppMessageEmailMessage': async
Essa configuração indica que todas as mensagens da classe EmailMessage
serão processadas de forma assíncrona. Para criar a classe EmailMessage
, basta criar um arquivo src/Message/EmailMessage.php
com o seguinte conteúdo:
namespace AppMessage;
class EmailMessage
{
private $to;
private $subject;
private $body;
public function __construct(string $to, string $subject, string $body)
{
$this->to = $to;
$this->subject = $subject;
$this->body = $body;
}
public function getTo(): string
{
return $this->to;
}
public function getSubject(): string
{
return $this->subject;
}
public function getBody(): string
{
return $this->body;
}
}
Com essa configuração, é possível enviar mensagens para a fila de e-mails com o seguinte código:
$bus = new MessageBus(array(new Messenger()));
$message = new EmailMessage('destinatario@example.com', 'Assunto do e-mail', 'Corpo do e-mail');
$bus->dispatch($message);
Esse código cria um novo objeto MessageBus
com o serviço Messenger
e envia a mensagem criada para a fila de e-mails.
Por fim, é preciso definir o serviço de processamento que vai executar as tarefas da fila. Isso pode ser feito criando uma classe que implemente a interface MessageHandlerInterface
, e adicionando um novo serviço no arquivo services.yaml
. Por exemplo:
services:
AppMessageHandlerEmailMessageHandler:
tags:
- { name: messenger.message_handler, bus: async }
Nesse caso, a classe AppMessageHandlerEmailMessageHandler
vai processar as mensagens da fila de e-mails, e será registrada como um serviço máx no container de serviços do Symfony.
Conclusão
O Symfony Messenger é uma ferramenta poderosa para criar sistemas baseadas em fila de mensagens, permitindo que tarefas pesadas sejam colocadas em segundo plano. Utilizar o Symfony Messenger pode tornar seu sistema mais rápido e performático, liberando recursos do servidor para outras tarefas.