Fila Stomp
Stomp é um protocolo de mensagens direcionadas simples (stream), que fornece um formato de conexão interoperável, permitindo que clientes STOMP interajam com qualquer broker de mensagens STOMP. A implementação do cliente Stomp está em workerman/stomp, sendo principalmente utilizada em cenários de filas de mensagens como RabbitMQ, Apollo, ActiveMQ, entre outros.
Instalação
composer require webman/stomp
Configuração
O arquivo de configuração está localizado em config/plugin/webman/stomp
Enviar Mensagem
<?php
namespace app\controller;
use support\Request;
use Webman\Stomp\Client;
class Index
{
public function queue(Request $request)
{
// Fila
$queue = 'examples';
// Dados (ao passar um array, é necessário serializar manualmente, como usando json_encode, serialize, etc.)
$data = json_encode(['to' => 'tom@gmail.com', 'content' => 'hello']);
// Executar envio
Client::send($queue, $data);
return response('teste de fila redis');
}
}
Para compatibilidade com outros projetos, o componente Stomp não fornece funcionalidade automática de serialização e desserialização. Se os dados enviados forem um array, é necessário serializar manualmente e, ao consumir, desserializar manualmente.
Consumir Mensagem
Crie app/queue/stomp/MyMailSend.php
(o nome da classe pode ser qualquer um, desde que siga a norma psr4).
<?php
namespace app\queue\stomp;
use Workerman\Stomp\AckResolver;
use Webman\Stomp\Consumer;
class MyMailSend implements Consumer
{
// Nome da fila
public $queue = 'examples';
// Nome da conexão, correspondente ao definido em stomp.php
public $connection = 'default';
// Se o valor for client, é necessário chamar $ack_resolver->ack() para informar ao servidor que foi consumido com sucesso
// Se o valor for auto, não é necessário chamar $ack_resolver->ack()
public $ack = 'auto';
// Consumir
public function consume($data, AckResolver $ack_resolver = null)
{
// Se os dados forem um array, é necessário desserializar manualmente
var_export(json_decode($data, true)); // Saída: ['to' => 'tom@gmail.com', 'content' => 'hello']
// Informar ao servidor que foi consumido com sucesso
$ack_resolver->ack(); // Se ack for auto, esta chamada pode ser ignorada
}
}
Habilitar o Protocolo Stomp no RabbitMQ
O RabbitMQ não habilita o protocolo Stomp por padrão, você precisa executar o seguinte comando para habilitá-lo:
rabbitmq-plugins enable rabbitmq_stomp
Após a habilitação, a porta padrão do Stomp será 61613.