File d'attente Stomp

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

Installation

Exécutez composer require webman/stomp pour installer.

Configuration

Le fichier de configuration se trouve dans config/plugin/webman/stomp.

Envoi de 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 (si vous transmettez un tableau, vous devez le sérialiser vous-même, par exemple en utilisant json_encode, serialize, etc.)
        $data = json_encode(['to' => 'tom@gmail.com', 'content' => 'hello']);
        // Envoi du message
        Client::send($queue, $data);

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

}

Pour des raisons de compatibilité avec d'autres projets, le composant Stomp ne fournit pas de fonctionnalité de sérialisation et désérialisation automatiques. Si vous envoyez des données sous forme de tableau, assurez-vous de les sérialiser manuellement et de les désérialiser lors de la consommation.

Consommation de messages

Créez un nouveau fichier app/queue/stomp/MyMailSend.php (le nom de la classe est arbitraire, tant qu'il est conforme à la norme PSR-4).

<?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 à la connexion dans stomp.php
    public $connection = 'default';

    // Lorsque la valeur est 'client', vous devez appeler $ack_resolver->ack() pour indiquer au serveur que la consommation a réussi.
    // Lorsque la valeur est 'auto', vous n'avez pas besoin d'appeler $ack_resolver->ack().
    public $ack = 'auto';

    // Consommer
    public function consume($data, AckResolver $ack_resolver = null)
    {
        // Si les données sont sous forme de tableau, vous devez les désérialiser manuellement
        var_export(json_decode($data, true)); // renvoie ['to' => 'tom@gmail.com', 'content' => 'hello']
        // Indiquer au serveur que la consommation a réussi
        $ack_resolver->ack(); // L'appel à ack peut être omis lorsque ack vaut 'auto'
    }
}

Activation du protocole Stomp pour RabbitMQ

Par défaut, RabbitMQ n'active pas le protocole Stomp. Vous devez exécuter la commande suivante pour l'activer.

rabbitmq-plugins enable rabbitmq_stomp

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