Stomp-Warteschlange
Stomp ist ein einfaches (textbasiertes) Messaging-Protokoll, das ein interoperables Verbindungformat bereitstellt und es STOMP-Clients ermöglicht, mit beliebigen STOMP-Nachrichtenbrokern zu interagieren. workerman/stomp implementiert einen Stomp-Client, der hauptsächlich für Szenarien mit Nachrichtenwarteschlangen wie RabbitMQ, Apollo, ActiveMQ usw. verwendet wird.
Installation
composer require webman/stomp
Konfiguration
Die Konfigurationsdatei befindet sich unter config/plugin/webman/stomp
.
Nachrichtenlieferung
<?php
namespace app\controller;
use support\Request;
use Webman\Stomp\Client;
class Index
{
public function queue(Request $request)
{
// Warteschlange
$queue = 'Beispiele';
// Daten (beim Übergeben von Arrays muss eine eigene Serialisierung, z. B. mit json_encode, serialize etc., durchgeführt werden)
$data = json_encode(['an' => 'tom@gmail.com', 'inhalt' => 'hallo']);
// Lieferung durchführen
Client::send($queue, $data);
return response('Redis-Warteschlange Test');
}
}
Um die Kompatibilität mit anderen Projekten zu gewährleisten, bietet das Stomp-Modul keine automatische Serialisierung und Deserialisierung an. Wenn Array-Daten übermittelt werden, muss dies selbst durchgeführt werden, und beim Verbrauch muss dies manuell rückgängig gemacht werden.
Nachrichtenverbrauch
Erstellen Sie app/queue/stomp/MyMailSend.php
(beliebiger Klassenname, der dem PSR-4-Standard entspricht).
<?php
namespace app\queue\stomp;
use Workerman\Stomp\AckResolver;
use Webman\Stomp\Consumer;
class MyMailSend implements Consumer
{
// Warteschlangenname
public $queue = 'Beispiele';
// Verbindungsnamen, die mit der Verbindung in stomp.php übereinstimmen
public $connection = 'standard';
// Wenn der Wert "client" ist, muss $ack_resolver->ack() aufgerufen werden, um dem Server mitzuteilen, dass die Verarbeitung erfolgreich war
// Wenn der Wert "auto" ist, muss $ack_resolver->ack() nicht aufgerufen werden
public $ack = 'auto';
// Verbrauch
public function consume($data, AckResolver $ack_resolver = null)
{
// Bei Array-Daten muss eine manuelle Deserialisierung erfolgen
var_export(json_decode($data, true)); // Gibt ['an' => 'tom@gmail.com', 'inhalt' => 'hallo'] aus
// Dem Server mitteilen, dass die Verarbeitung erfolgreich war
$ack_resolver->ack(); // Bei ack "auto" kann dieser Aufruf ausgelassen werden
}
}
Aktivierung des Stomp-Protokolls für RabbitMQ
Standardmäßig ist das Stomp-Protokoll in RabbitMQ nicht aktiviert. Die folgenden Befehle müssen ausgeführt werden, um es zu aktivieren.
rabbitmq-plugins enable rabbitmq_stomp
Nach der Aktivierung läuft Stomp standardmäßig auf Port 61613.