Einführung
In diesem Lab lernen Sie das Pub/Sub-Nachrichtensystem von Redis kennen. Sie erfahren, wie Sie Kanäle abonnieren, Nachrichten veröffentlichen und Abonnements beenden. Dabei werden Sie schrittweise durch die grundlegenden Vorgänge mit den Befehlen SUBSCRIBE, PUBLISH, UNSUBSCRIBE und PSUBSCRIBE geführt.
Einen Kanal mit SUBSCRIBE abonnieren
In diesem Schritt lernen Sie, wie Sie mit dem Befehl SUBSCRIBE einen Kanal in Redis abonnieren. Durch das Abonnieren eines Kanals können Sie Nachrichten empfangen, die an diesen Kanal gesendet werden. Dies ist ein grundlegendes Konzept des Pub/Sub-Nachrichtensystems von Redis.
Terminal 1: Einen Kanal abonnieren
Öffnen Sie Ihr erstes Terminal (im Folgenden Terminal 1 genannt). Sie können das im LabEx-Umfeld bereitgestellte Xfce-Terminal verwenden.
Stellen Sie mit dem Befehl redis-cli eine Verbindung zum Redis-Server her:
redis-cli
Daraufhin sollte die Redis-Eingabeaufforderung angezeigt werden: 127.0.0.1:6379>.
Abonnieren Sie mit dem Befehl SUBSCRIBE einen Kanal namens mychannel:
SUBSCRIBE mychannel
Die Ausgabe sieht ungefähr so aus:
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "mychannel"
3) (integer) 1
Die Ausgabe im Einzelnen:
"subscribe": Zeigt an, dass Sie den Kanal erfolgreich abonniert haben."mychannel": Dies ist der Name des abonnierten Kanals.(integer) 1: Gibt die Anzahl der Kanäle an, die Sie derzeit abonniert haben.
Wichtig: Lassen Sie Terminal 1 mit der aktiven redis-cli-Sitzung und dem bestehenden Kanalabonnement geöffnet. Schließen Sie dieses Terminal nicht und drücken Sie nicht
Ctrl+C, da Sie dadurch das Abonnement beenden würden. Im nächsten Schritt verwenden wir ein zweites Terminal, um Nachrichten zu veröffentlichen.
Nachrichten mit PUBLISH veröffentlichen
In diesem Schritt lernen Sie, wie Sie mit dem Befehl PUBLISH Nachrichten an einen Redis-Kanal senden. Das Veröffentlichen von Nachrichten ist die zentrale Funktion des Pub/Sub-Systems. So können Sie Daten an alle Abonnenten eines bestimmten Kanals senden.
Terminal 2: Nachrichten veröffentlichen
Öffnen Sie ein zweites Terminal (im Folgenden Terminal 2 genannt). In Ihrem Xfce-Terminal können Sie dafür einen neuen Tab öffnen.
Stellen Sie mit dem Befehl redis-cli eine Verbindung zum Redis-Server her:
redis-cli
Daraufhin sollte die Redis-Eingabeaufforderung angezeigt werden: 127.0.0.1:6379>.
Veröffentlichen Sie nun mit dem Befehl PUBLISH eine Nachricht auf dem Kanal mychannel:
PUBLISH mychannel "Hello, Redis!"
Die Ausgabe in Terminal 2 gibt die Anzahl der Clients an, die die Nachricht empfangen haben:
(integer) 1
In diesem Fall lautet die Ausgabe (integer) 1, weil in Terminal 1 aus dem vorherigen Schritt ein aktives Abonnement für mychannel besteht.
Die Nachricht in Terminal 1 beobachten
Wechseln Sie nun zurück zu Terminal 1, in dem Sie mychannel in Schritt 1 abonniert haben. Die gerade veröffentlichte Nachricht sollte dort in Echtzeit angezeigt werden:
1) "message"
2) "mychannel"
3) "Hello, Redis!"
Die Ausgabe bedeutet:
"message": Zeigt an, dass es sich um eine veröffentlichte Nachricht handelt."mychannel": Der Kanal, an den die Nachricht gesendet wurde."Hello, Redis!": Der eigentliche Nachrichteninhalt.
Echtzeitnachrichten testen
Sie können nun die Nachrichtenübertragung in Echtzeit ausprobieren. Wechseln Sie zurück zu Terminal 2 und veröffentlichen Sie weitere Nachrichten. Wechseln Sie anschließend zu Terminal 1, um deren sofortiges Eintreffen zu beobachten. Testen Sie verschiedene Nachrichten, um die Live-Kommunikation zu verfolgen.
Beispiel in Terminal 2:
PUBLISH mychannel "This is message 2"
PUBLISH mychannel "Real-time messaging works!"
Wichtig: Lassen Sie sowohl Terminal 1 als auch Terminal 2 mit aktiven redis-cli-Sitzungen geöffnet. In den nächsten Schritten benötigen wir beide Terminals weiterhin.
Ein Abonnement mit UNSUBSCRIBE beenden
In diesem Schritt lernen Sie, wie Sie mit dem Befehl UNSUBSCRIBE ein Redis-Kanalabonnement beenden. Dadurch wird der Client aus der Abonnentenliste des jeweiligen Kanals entfernt und empfängt keine weiteren Nachrichten mehr, die an diesen Kanal gesendet werden.
Terminal 1: Den Abonnementmodus verlassen
Wechseln Sie zu Terminal 1, in dem Sie derzeit mychannel abonniert haben. Dort sollte der Abonnementstatus mit „Reading messages... (press Ctrl-C to quit)“ angezeigt werden.
Da sich Terminal 1 im Abonnementmodus befindet, können Sie dort keine normalen Redis-Befehle direkt ausführen. Drücken Sie Ctrl+C, um den Abonnementmodus zu verlassen und zur Terminal-Eingabeaufforderung zurückzukehren. Stellen Sie anschließend erneut eine Verbindung zu Redis her:
redis-cli
Führen Sie nun den Befehl UNSUBSCRIBE aus. Obwohl die Verbindungstrennung das Abonnement bereits entfernt hat, veranschaulicht dieser Befehl die Redis-Antwort beim Beenden eines Abonnements:
UNSUBSCRIBE mychannel
Hinweis: Als Sie Ctrl+C gedrückt haben, wurde die Verbindung zu allen Abonnements bereits getrennt. Der Befehl UNSUBSCRIBE dient hier nur zur Demonstration. In der Praxis beendet das Trennen der Verbindung automatisch alle Kanalabonnements.
Die Ausgabe in Terminal 1 sieht ungefähr so aus:
1) "unsubscribe"
2) "mychannel"
3) (integer) 0
Die Ausgabe im Einzelnen:
"unsubscribe": Zeigt an, dass Sie das Abonnement eines Kanals beendet haben."mychannel": Dies ist der Name des Kanals, dessen Abonnement beendet wurde.(integer) 0: Gibt die Anzahl der Kanäle an, die Sie derzeit abonniert haben. Dieser Wert ist jetzt 0, da Sie das Abonnement fürmychannelbeendet haben.
Terminal 2: Das Veröffentlichen nach dem Beenden des Abonnements testen
Wechseln Sie nun zu Terminal 2 und veröffentlichen Sie eine weitere Nachricht auf mychannel:
PUBLISH mychannel "Is anyone still there?"
Die Ausgabe in Terminal 2 lautet:
(integer) 0
Dies zeigt an, dass kein Client die Nachricht empfangen hat, weil Sie das Abonnement für den Kanal in Terminal 1 beendet haben.
Überprüfen, dass keine Nachricht empfangen wird
Sehen Sie in Terminal 1 nach. Dort sollte keine neue Nachricht erscheinen, da Sie das Abonnement für den Kanal beendet haben.
Damit wird deutlich: Wenn Sie das Abonnement eines Kanals beenden, empfangen Sie keine weiteren Nachrichten mehr, die an diesen Kanal gesendet werden. Der Herausgeber kann zwar weiterhin Nachrichten versenden, doch es gibt niemanden, der sie empfängt.
Wichtig: Lassen Sie beide Terminals und deren redis-cli-Sitzungen für den nächsten Schritt geöffnet.
Mit PSUBSCRIBE ein Muster abonnieren
In diesem Schritt lernen Sie, wie Sie mit dem Redis-Befehl PSUBSCRIBE Kanäle anhand von Mustern abonnieren. Mit PSUBSCRIBE können Sie mehrere Kanäle abonnieren, die einem bestimmten Muster entsprechen. Das ist hilfreich, wenn Sie Nachrichten aus einer Gruppe zusammengehöriger Kanäle empfangen möchten, ohne jeden Kanal einzeln abonnieren zu müssen.
Terminal 1: Ein Muster abonnieren
Da Sie im vorherigen Schritt das Abonnement für mychannel beendet haben, sollte Terminal 1 nun wieder die normale Redis-Eingabeaufforderung anzeigen.
Abonnieren Sie in Terminal 1 mit dem Befehl PSUBSCRIBE alle Kanäle, die dem Muster news.* entsprechen:
PSUBSCRIBE news.*
Die Ausgabe sieht ungefähr so aus:
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "news.*"
3) (integer) 1
Die Ausgabe im Einzelnen:
"psubscribe": Zeigt an, dass Sie das Muster erfolgreich abonniert haben."news.*": Dies ist das abonnierte Muster..*ist ein Platzhalter, der beliebige Zeichenfolgen erfasst.(integer) 1: Gibt die Anzahl der Muster an, die Sie derzeit abonniert haben.
Terminal 2: Nachrichten an passende Kanäle senden
Wechseln Sie zu Terminal 2 und veröffentlichen Sie mit dem Befehl PUBLISH eine Nachricht auf dem Kanal news.sports:
PUBLISH news.sports "Sports news update!"
Die Ausgabe in Terminal 2 gibt die Anzahl der Abonnenten an, die die Nachricht empfangen haben:
(integer) 1
Die Musterübereinstimmung beobachten
Wechseln Sie zurück zu Terminal 1, in dem Sie das Muster abonniert haben. Dort sollte die gerade veröffentlichte Nachricht erscheinen:
1) "pmessage"
2) "news.*"
3) "news.sports"
4) "Sports news update!"
Die Ausgabe zeigt:
"pmessage": Zeigt an, dass es sich um eine Nachricht handelt, die über ein Muster gefunden wurde."news.*": Das Muster, auf das die Nachricht passt."news.sports": Der konkrete Kanal, auf dem die Nachricht veröffentlicht wurde."Sports news update!": Der Nachrichteninhalt.
Mehrere Kanäle testen
Veröffentlichen Sie in Terminal 2 Nachrichten auf verschiedenen Kanälen, die dem Muster entsprechen:
PUBLISH news.technology "New AI breakthrough!"
PUBLISH news.weather "Sunny skies ahead!"
PUBLISH sports.basketball "This won't match the pattern"
Beobachten Sie in Terminal 1, dass nur Nachrichten von Kanälen mit dem Muster news.* empfangen werden. sports.basketball wird nicht berücksichtigt, da dieser Kanal nicht dem Muster news.* entspricht.
Wichtig: Lassen Sie beide Terminals und deren redis-cli-Sitzungen geöffnet. Das Musterabonnement zeigt, wie Sie gleichzeitig mehrere verwandte Kanäle überwachen können.
Zusammenfassung
In diesem Lab haben Sie die Grundlagen des Redis-Pub/Sub-Nachrichtensystems kennengelernt. Sie haben gelernt, wie Sie mit SUBSCRIBE Kanäle abonnieren, mit PUBLISH Nachrichten an Kanäle senden, mit UNSUBSCRIBE Kanalabonnements beenden und mit PSUBSCRIBE Kanäle anhand von Mustern abonnieren. Diese Befehle sind unverzichtbar für die Entwicklung von Echtzeit-Nachrichtenanwendungen mit Redis.


