Heim  >  Artikel  >  Backend-Entwicklung  >  So verwenden Sie RabbitMQ für die Aufgabenplanung und Warteschlangenverwaltung in PHP

So verwenden Sie RabbitMQ für die Aufgabenplanung und Warteschlangenverwaltung in PHP

WBOY
WBOYOriginal
2023-07-18 09:33:091086Durchsuche

So verwenden Sie RabbitMQ für die Aufgabenplanung und Warteschlangenverwaltung in PHP

1 Einführung
Bei der Entwicklung von Webanwendungen müssen wir häufig einige zeitaufwändige Aufgaben erledigen, wie z. B. das Versenden von E-Mails, das Erstellen von Berichten, die Verarbeitung großer Datenmengen usw . Wenn diese Aufgaben direkt in der Webanforderung ausgeführt werden, kann sich die Antwortzeit verlangsamen und das Benutzererlebnis beeinträchtigt werden. Um dieses Problem zu lösen, können wir Nachrichtenwarteschlangen für die Aufgabenplanung und Warteschlangenverwaltung verwenden. RabbitMQ ist ein leistungsstarkes Nachrichtenwarteschlangensystem, das eine umfangreiche API bereitstellt, die problemlos in PHP verwendet werden kann.

2. RabbitMQ installieren
Zuerst müssen wir RabbitMQ auf dem Server installieren. Sie können es gemäß dem auf der offiziellen Website bereitgestellten Installations-Tutorial installieren oder Docker direkt verwenden, um den RabbitMQ-Container auszuführen. Nach Abschluss der Installation können Sie den Status der Warteschlange anzeigen und die Warteschlange verwalten, indem Sie auf die RabbitMQ-Verwaltungsseite zugreifen.

3. Verwenden Sie zum Betrieb die PHP-amqplib-Bibliothek.
Für die Verwendung von RabbitMQ in PHP ist die Verwendung einer Drittanbieterbibliothek erforderlich, z. B. PHP-amqplib. Diese Bibliothek kann über Composer eingeführt werden. Der Befehl lautet wie folgt:

composer require php-amqplib/php-amqplib

Fügen Sie nach Abschluss der Installation die Bibliotheksdatei in den Code ein:

use PhpAmqpLibConnectionAMQPStreamConnection;
use PhpAmqpLibMessageAMQPMessage;

IV. Bevor Sie RabbitMQ verwenden, müssen Sie eine Verbindung herstellen RabbitMQ-Server:

$host = 'localhost';
$port = 5672;
$user = 'guest';
$pass = 'guest';
$connection = new AMQPStreamConnection($host, $port, $user, $pass);
$channel = $connection->channel();

Hier verwendet: Der Standard-RabbitMQ-Host, -Port, -Benutzername und -Passwort. Wenn benutzerdefinierte Anforderungen vorliegen, können diese Parameter entsprechend der tatsächlichen Situation geändert werden.

5. Nachrichten an die Warteschlange senden

Bei der Aufgabenplanung senden wir normalerweise Aufgaben an eine Nachrichtenwarteschlange, damit sie vom Hintergrundarbeiter verarbeitet werden können. Mit dem folgenden Code können Nachrichten an die Warteschlange gesendet werden:

$message = new AMQPMessage('hello world');
$channel->basic_publish($message, '', 'task_queue');

Hier erstellen wir eine AMQPMessage-Instanz und legen den zu sendenden Nachrichtentext fest. Verwenden Sie dann die Methode basic_publish, um die Nachricht an eine Warteschlange namens task_queue zu senden.

6. Nachrichten in der Warteschlange konsumieren

Das Konsumieren von Nachrichten in der Warteschlange erfordert das Starten eines oder mehrerer Worker-Prozesse im Hintergrund zur Verarbeitung. Der Worker-Prozess ruft die Nachricht aus der Warteschlange ab und führt die entsprechenden Aufgaben aus. Sie können den folgenden Code verwenden, um Nachrichten in der Warteschlange zu konsumieren:

$callback = function ($message) {
    echo "Received: " . $message->body . "
";
    usleep(100000);
    echo "Done
";
    $message->ack();
};
$channel->basic_consume('task_queue', '', false, false, false, false, $callback);
while (count($channel->callbacks)) {
    $channel->wait();
}

Hier definieren wir eine anonyme Funktion $callback als Nachrichtenverarbeitungslogik. In dieser Funktion können wir eine bestimmte Aufgabenverarbeitung durchführen und dann die Methode $message->ack() aufrufen, um anzuzeigen, dass die Aufgabe abgeschlossen ist. Der Grund für den Aufruf der ack-Methode liegt darin, dass RabbitMQ standardmäßig nicht weiß, ob die Aufgabe erfolgreich ausgeführt wird. Daher müssen wir das Ausführungsergebnis der Aufgabe manuell bestätigen.

7. Nachrichtenpersistenz

Im obigen Beispiel ist die Nachrichtenpersistenz standardmäßig deaktiviert. Wenn der RabbitMQ-Server neu gestartet wird, geht die Nachricht verloren. Wenn wir möchten, dass die Nachricht nach dem Neustart des Servers automatisch wiederhergestellt wird, müssen wir eine Nachrichtenpersistenz durchführen. Es kann durch den folgenden Code festgelegt werden:

$channel->queue_declare('task_queue', false, true, false, false);

Setzen Sie den dritten Parameter auf true, was bedeutet, dass die Warteschlange als dauerhafte Warteschlange festgelegt ist.

8. Verzögerte Aufgaben

Manchmal müssen wir auch verzögerte Aufgaben implementieren und Aufgaben nach einer bestimmten Zeit ausführen. RabbitMQ selbst unterstützt die Funktion zum Verzögern von Aufgaben nicht, sie kann jedoch durch Hinzufügen zusätzlicher Plug-Ins erreicht werden. Ein häufig verwendetes Plug-In ist Rabbitmq_delayed_message_exchange, das auf folgende Weise installiert werden kann:

rabbitmq-plugins enable rabbitmq_delayed_message_exchange

Nach der Installation legen Sie beim Senden einer Nachricht die Eigenschaften von AMQPMessage wie folgt fest:

$message->set('application_headers', ['x-delay' => 3000]);

Der obige Code wird mit einer Verzögerung von ausgeführt 3 Sekunden nach dem Senden der Nachricht.

9. Zusammenfassung

Durch die Einführung dieses Artikels haben wir gelernt, wie man RabbitMQ für die Aufgabenplanung und Warteschlangenverwaltung in PHP verwendet. Nachdem wir die oben genannten Schritte geübt haben, können wir RabbitMQ problemlos verwenden, um zeitaufwändige Aufgaben zu erledigen und die Leistung und Zuverlässigkeit der Anwendung zu verbessern. Gleichzeitig werden Nachrichtenpersistenz und verzögerte Aufgabenverarbeitungsmethoden eingeführt, sodass wir unterschiedliche Anforderungen besser erfüllen können. Ich hoffe, dieser Artikel hilft Ihnen bei der Verwendung von RabbitMQ in tatsächlichen Projekten.

Referenzmaterialien:

    Offizielle RabbitMQ-Website: https://www.rabbitmq.com/
  1. Offizielle PHP-amqplib-Dokumentation: https://github.com/php-amqplib/php-amqplib

Das obige ist der detaillierte Inhalt vonSo verwenden Sie RabbitMQ für die Aufgabenplanung und Warteschlangenverwaltung in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn