(16) 981791110 contato@policast.studio

O que é o serviço de filas de mensagens do Symfony?

O serviço de filas de mensagens do Symfony é uma ferramenta que permite executar tarefas de forma assíncrona e em segundo plano. Isso é útil para lidar com tarefas demoradas, tais como processamento de arquivos grandes ou enviar e-mails para uma grande quantidade de usuários.

Como funciona o serviço de filas de mensagens do Symfony?

O serviço de filas de mensagens funciona utilizando um sistema de fila, onde as tarefas são colocadas em uma fila para serem executadas posteriormente. Cada tarefa é executada em um processo separado, o que significa que o tempo de execução da tarefa não afetará a experiência do usuário na aplicação.

Como configurar o serviço de filas de mensagens do Symfony?

Antes de começar a usar o serviço de filas de mensagens, é necessário configurá-lo. A configuração pode ser feita no arquivo config/packages/messenger.yaml. Nesse arquivo, você pode definir as filas e os processadores que serão utilizados.

Por exemplo, se você quiser criar uma fila chamada emails e utilizar o processador send_email, o arquivo de configuração ficaria assim:

messenger:
transports:
async: '%env(MESSENGER_TRANSPORT_DSN)%'
routing:
'AppMessageSendEmail': async

Nesse exemplo, a fila será gerenciada pelo transporte definido na variável de ambiente MESSENGER_TRANSPORT_DSN, e a classe SendEmail será executada utilizando esse transporte.

Como criar uma tarefa assíncrona?

Para criar uma tarefa assíncrona, você precisará criar uma classe que implementa a interface MessageInterface. Essa classe deve conter todas as informações necessárias para a execução da tarefa, como parâmetros e métodos.

Por exemplo, se você quiser enviar um e-mail para um usuário, poderia criar uma classe SendEmail que contém as informações necessárias para enviar o e-mail:

namespace AppMessage;

class SendEmail implements MessageInterface
{
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()
{
return $this->to;
}

public function getSubject()
{
return $this->subject;
}

public function getBody()
{
return $this->body;
}
}

Depois de criar a classe, você pode enviar a tarefa para a fila utilizando o serviço de despacho de mensagens:

$message = new SendEmail('user@example.com', 'Assunto do e-mail', 'Conteúdo do e-mail');
$this->messageBus->dispatch($message);

Isso irá colocar a tarefa na fila para ser executada posteriormente de forma assíncrona e em segundo plano.

Como criar uma tarefa retomável?

Uma tarefa retomável é aquela que pode ser retomada após uma falha. Isso é útil para evitar a perda de dados ou a repetição de tarefas.

Para criar uma tarefa retomável, você precisa adicionar a interface RetryableMessageInterface à sua classe:

use SymfonyComponentMessengerRretryableMessageInterface;

class SendEmail implements MessageInterface, RetryableMessageInterface
{
// ...
}

Depois, você precisa definir o método calculateRetryTimeout(), que retorna o tempo necessário para a nova tentativa de execução da tarefa:

public function calculateRetryTimeout(): int
{
return 60; // 60 segundos
}

Isso permitirá que a tarefa seja retomada após uma falha, com um tempo apropriado de espera entre as tentativas.

Conclusão

O serviço de filas de mensagens do Symfony é uma ferramenta poderosa para gerenciar tarefas assíncronas e em segundo plano em aplicações Symfony. Utilizando esse serviço, é possível executar tarefas demoradas sem afetar a experiência do usuário na aplicação, além de criar tarefas retomáveis para evitar a perda de dados ou a repetição de tarefas.