Coda Stomp

Stomp è un protocollo di messaggistica orientato a semplice (stream) testo, che fornisce un formato di connessione interoperabile, permettendo ai client STOMP di interagire con qualsiasi broker di messaggi STOMP. workerman/stomp implementa il client Stomp, principalmente utilizzato in scenari di code di messaggi come RabbitMQ, Apollo, ActiveMQ, ecc.

Installazione

composer require webman/stomp

Configurazione

Il file di configurazione si trova in config/plugin/webman/stomp

Invio messaggi

<?php
namespace app\controller;

use support\Request;
use Webman\Stomp\Client;

class Index
{
    public function queue(Request $request)
    {
        // Coda
        $queue = 'examples';
        // Dati (quando si passa un array, è necessario serializzarlo, ad esempio utilizzando json_encode, serialize, ecc.)
        $data = json_encode(['to' => 'tom@gmail.com', 'content' => 'hello']);
        // Procedi con l'invio
        Client::send($queue, $data);

        return response('test coda redis');
    }

}

Per garantire la compatibilità con altri progetti, il componente Stomp non fornisce funzionalità di serializzazione/deserializzazione automatica; se i dati inviati sono array, è necessario serializzarli e deserializzarli manualmente durante il consumo.

Consumo messaggi

Crea app/queue/stomp/MyMailSend.php (il nome della classe è facoltativo, deve solo rispettare lo standard psr4).

<?php
namespace app\queue\stomp;

use Workerman\Stomp\AckResolver;
use Webman\Stomp\Consumer;

class MyMailSend implements Consumer
{
    // Nome della coda
    public $queue = 'examples';

    // Nome della connessione, corrispondente a stomp.php
    public $connection = 'default';

    // Se il valore è client, è necessario chiamare $ack_resolver->ack() 
    // per informare il server che il consumo è avvenuto con successo
    // Se il valore è auto, non è necessario chiamare $ack_resolver->ack()
    public $ack = 'auto';

    // Consumo
    public function consume($data, AckResolver $ack_resolver = null)
    {
        // Se i dati sono un array, è necessario deserializzarli manualmente
        var_export(json_decode($data, true)); // Restituisce ['to' => 'tom@gmail.com', 'content' => 'hello']
        // Informare il server che il consumo è avvenuto con successo
        $ack_resolver->ack(); // Se ack è auto, questa chiamata può essere omessa
    }
}

Attivare il protocollo stomp su rabbitmq

Rabbitmq per default non ha il protocollo stomp attivato, è necessario eseguire il seguente comando per attivarlo

rabbitmq-plugins enable rabbitmq_stomp

Dopo l'attivazione, la porta di stomp è di default 61613.