Componente Messenger Adicionado no Symfony 4.1

Andréia Bohner
2 min readApr 14, 2018

--

No Symfony 4.1, foi adicionado o novo componente Messenger que ajuda as aplicações a enviar e receber mensagens de/para outras aplicações ou através de filas de mensagens. Ele fornece um barramento de mensagens e alguns recursos de roteamento para enviar mensagens a partir de qualquer serviço onde você precisar, como em um controlador:

// src/Controller/DefaultController.php
namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Messenger\MessageBusInterface;
use Symfony\Component\Routing\Annotation\Route;

class DefaultController extends Controller
{
/**
* @Route("/", name="homepage")
*/
public function index(MessageBusInterface $bus)
{
// ...

$bus->dispatch(new MyMessage());
}
}

O envio de mensagens é a primeira parte do processo. Em seguida, você precisa criar um “manipulador (handler) de mensagens” e registrá-lo como um serviço com a tag messenger.message_handler para receber a mensagem e fazer algo com ela:

// src/MessageHandler/MyMessageHandler.php
namespace App\MessageHandler;

class MyMessageHandler
{
public function __invoke(MyMessage $message)
{
// do something with the message
}
}

Filas e Adaptadores AMQP

O componente inclui um adaptador AMQP pronto para se comunicar com a maioria dos brokers populares do AMQP, como o RabbitMQ. A comunicação com sistemas de enfileiramento ou de terceiros (Kafka, Amazon SQS, Google Pub/sub) é delegada a bibliotecas como o adaptador Enqueue:

# config/packages/messenger.yaml
framework:
messenger:
adapters:
default: "amqp://guest:guest@localhost:5672/%2f/messages"

Essa configuração permite rotear mensagens para o messenger.default_adapter e também configura um messenger.default_sender e messenger.default_receiver para ser usado ao rotear e consumir mensagens.

Roteamento

Em vez de chamar um manipulador (handler), você também pode rotear suas mensagens para um ou vários remetentes:

# config/packages/messenger.yaml
framework:
messenger:
routing:
# route this message to a single sender
'My\Message\Message': messenger.default_sender

# route this message to multiple senders
'My\Message\ToBeSentToTwoSenders': [messenger.default_sender, messenger.audit_sender]

# route the rest of messages to the default sender
'*': messenger.default_sender

Uma vez que suas mensagens foram roteadas, você pode consumi-las com o comando messenger:consume-messages:

$ bin/console messenger:consume-messages messenger.default_receiver

O barramento de mensagens definido pelo componente Messenger é baseado em middleware. Você pode ler mais sobre isso e outros recursos do Messenger no último rascunho de sua documentação.

Tradução de: New in Symfony 4.1: Messenger component

--

--