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.