File d'attente Stomp

Stomp est un protocole de messages simple (de flux) orienté texte, qui fournit un format de connexion interopérable, permettant aux clients STOMP d'interagir avec n'importe quel courtier de messages STOMP (Broker). workerman/stomp implémente un client Stomp, principalement utilisé dans des scénarios de files d'attente de messages tels que RabbitMQ, Apollo, ActiveMQ, etc.

Installation

composer require webman/stomp

Configuration

Le fichier de configuration se trouve sous config/plugin/webman/stomp

Envoyer des messages

<?php
namespace app\controller;

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

class Index
{
    public function queue(Request $request)
    {
        // File d'attente
        $queue = 'examples';
        // Données (lors de la transmission d'un tableau, il est nécessaire de le sérialiser soi-même, par exemple en utilisant json_encode, serialize, etc.)
        $data = json_encode(['to' => 'tom@gmail.com', 'content' => 'hello']);
        // Exécuter l'envoi
        Client::send($queue, $data);

        return response('test de file d\'attente redis');
    }

}

Afin de maintenir la compatibilité avec d'autres projets, le composant Stomp n'a pas fourni de fonctionnalité de sérialisation et désérialisation automatique. Si des données sous forme de tableau sont envoyées, il est nécessaire de les sérialiser soi-même et de les désérialiser lors de la consommation.

Consommer des messages

Créez app/queue/stomp/MyMailSend.php (le nom de la classe peut être n'importe quel nom, tant qu'il respecte les normes psr4).

<?php
namespace app\queue\stomp;

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

class MyMailSend implements Consumer
{
    // Nom de la file d'attente
    public $queue = 'examples';

    // Nom de la connexion, correspondant à stomp.php
    public $connection = 'default';

    // Lorsque la valeur est client, il faut appeler $ack_resolver->ack() pour informer le serveur que la consommation a réussi
    // Lorsque la valeur est auto, il n'est pas nécessaire d'appeler $ack_resolver->ack()
    public $ack = 'auto';

    // Consommer
    public function consume($data, AckResolver $ack_resolver = null)
    {
        // Si les données sont un tableau, il faut les désérialiser soi-même
        var_export(json_decode($data, true)); // Affiche ['to' => 'tom@gmail.com', 'content' => 'hello']
        // Informer le serveur que la consommation a réussi
        $ack_resolver->ack(); // Si ack est auto, cet appel peut être omis
    }
}

Activer le protocole stomp dans RabbitMQ

RabbitMQ n'active pas le protocole stomp par défaut, vous devez exécuter la commande suivante pour l'activer

rabbitmq-plugins enable rabbitmq_stomp

Après l'activation, le port par défaut de stomp est 61613.