Messagerie Pub/Sub avec Redis

RedisBeginner
Pratiquer maintenant

Introduction

Dans ce lab, vous allez découvrir le système de messagerie Pub/Sub de Redis. Vous apprendrez à vous abonner à des canaux, à publier des messages et à vous désabonner. Ce lab vous guidera à travers les opérations fondamentales en utilisant les commandes SUBSCRIBE, PUBLISH, UNSUBSCRIBE et PSUBSCRIBE.

S'abonner à un canal avec SUBSCRIBE

Dans cette étape, vous apprendrez à vous abonner à un canal dans Redis à l'aide de la commande SUBSCRIBE. S'abonner à un canal vous permet de recevoir les messages publiés sur celui-ci. Il s'agit d'un concept fondamental du système de messagerie Pub/Sub de Redis.

Terminal 1 : S'abonner au canal

Ouvrez votre premier terminal (que nous appellerons Terminal 1). Vous pouvez utiliser le terminal Xfce fourni dans l'environnement LabEx.

Connectez-vous au serveur Redis à l'aide de la commande redis-cli :

redis-cli

Vous devriez voir l'invite de commande Redis : 127.0.0.1:6379>.

Abonnez-vous à un canal nommé mychannel à l'aide de la commande SUBSCRIBE :

SUBSCRIBE mychannel

La sortie ressemblera à ceci :

Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "mychannel"
3) (integer) 1

Analysons cette sortie :

  • "subscribe" : Indique que vous vous êtes abonné avec succès à un canal.
  • "mychannel" : Le nom du canal auquel vous vous êtes abonné.
  • (integer) 1 : Le nombre de canaux auxquels vous êtes actuellement abonné.

Important : Laissez le Terminal 1 ouvert avec la session redis-cli active et abonnée au canal. NE fermez PAS ce terminal et n'appuyez PAS sur Ctrl+C, car cela vous désabonnerait du canal. Nous utiliserons un deuxième terminal pour publier des messages à l'étape suivante.

Publier des messages avec PUBLISH

Dans cette étape, vous apprendrez à publier des messages sur un canal dans Redis à l'aide de la commande PUBLISH. La publication de messages est la fonctionnalité principale du système Pub/Sub, vous permettant d'envoyer des données à tous les abonnés d'un canal spécifique.

Terminal 2 : Publier des messages

Ouvrez un deuxième terminal (que nous appellerons Terminal 2). Vous pouvez ouvrir un nouvel onglet dans votre terminal Xfce.

Connectez-vous au serveur Redis à l'aide de la commande redis-cli :

redis-cli

Vous devriez voir l'invite de commande Redis : 127.0.0.1:6379>.

Maintenant, publiez un message sur le canal mychannel à l'aide de la commande PUBLISH :

PUBLISH mychannel "Hello, Redis!"

La sortie dans le Terminal 2 indiquera le nombre de clients qui ont reçu le message :

(integer) 1

Dans ce cas, la sortie est (integer) 1 car vous possédez un abonnement actif à mychannel dans le Terminal 1 depuis l'étape précédente.

Observer le message dans le Terminal 1

Revenez maintenant au Terminal 1 (où vous vous êtes abonné à mychannel à l'étape 1). Vous devriez voir le message que vous venez de publier s'afficher en temps réel :

1) "message"
2) "mychannel"
3) "Hello, Redis!"

Cela montre :

  • "message" : Indique qu'il s'agit d'un message publié
  • "mychannel" : Le canal sur lequel le message a été publié
  • "Hello, Redis!" : Le contenu réel du message

Tester la messagerie en temps réel

Vous pouvez désormais expérimenter la messagerie en temps réel :

  1. Retournez dans le Terminal 2 et publiez d'autres messages.
  2. Basculez vers le Terminal 1 pour les voir apparaître instantanément.
  3. Essayez de publier différents messages pour observer la communication en direct.

Exemple - dans le Terminal 2 :

PUBLISH mychannel "This is message 2"
PUBLISH mychannel "Real-time messaging works!"

Important : Laissez le Terminal 1 et le Terminal 2 actifs avec leurs sessions redis-cli. Nous continuerons à utiliser les deux terminaux dans les prochaines étapes.

Se désabonner avec UNSUBSCRIBE

Dans cette étape, vous apprendrez à vous désabonner d'un canal dans Redis à l'aide de la commande UNSUBSCRIBE. Le désabonnement retire un client de la liste des abonnés d'un canal spécifique, l'empêchant de recevoir de nouveaux messages publiés sur ce canal.

Terminal 1 : Quitter le mode abonnement

Rendez-vous dans le Terminal 1 (où vous êtes actuellement abonné à mychannel). Vous devriez voir le statut d'abonnement affichant "Reading messages... (press Ctrl-C to quit)".

Puisque le Terminal 1 est en mode abonnement, vous ne pouvez pas exécuter directement des commandes Redis classiques. Pour vous désabonner, vous devez d'abord quitter le mode abonnement :

  1. Appuyez sur Ctrl+C pour quitter le mode abonnement.

  2. Vous devriez constater que la session redis-cli se termine et revient à l'invite du terminal.

  3. Reconnectez-vous à Redis :

    redis-cli
    
  4. Vous pouvez désormais exécuter la commande UNSUBSCRIBE (bien que ce ne soit pas strictement nécessaire puisque la déconnexion vous a déjà désabonné) :

    UNSUBSCRIBE mychannel
    

Remarque : Lorsque vous avez appuyé sur Ctrl+C, vous étiez en réalité déjà déconnecté de tous vos abonnements. La commande UNSUBSCRIBE est présentée ici à des fins de démonstration, mais en pratique, la déconnexion vous désabonne automatiquement de tous les canaux.

La sortie dans le Terminal 1 ressemblera à ceci :

1) "unsubscribe"
2) "mychannel"
3) (integer) 0

Analysons cette sortie :

  • "unsubscribe" : Indique que vous vous êtes désabonné d'un canal.
  • "mychannel" : Le nom du canal dont vous vous êtes désabonné.
  • (integer) 0 : Le nombre de canaux auxquels vous êtes actuellement abonné. Il est maintenant à 0 puisque vous vous êtes désabonné de mychannel.

Terminal 2 : Tester la publication après le désabonnement

Basculez maintenant vers le Terminal 2 et publiez un autre message sur mychannel :

PUBLISH mychannel "Is anyone still there?"

La sortie dans le Terminal 2 sera :

(integer) 0

Cela indique qu'aucun client n'a reçu le message, car vous vous êtes désabonné du canal dans le Terminal 1.

Vérifier qu'aucun message n'est reçu

Regardez le Terminal 1 : vous remarquerez qu'aucun nouveau message n'apparaît puisque vous vous êtes désabonné du canal.

Cela démontre comment le fait de se désabonner d'un canal vous empêche de recevoir les messages futurs qui y sont publiés, tandis que l'expéditeur peut toujours continuer à envoyer des messages (mais personne ne les recevra).

Important : Gardez les deux terminaux et leurs sessions redis-cli actifs pour l'étape suivante.

S'abonner par motif avec PSUBSCRIBE

Dans cette étape, vous apprendrez à vous abonner à des canaux en utilisant des motifs (patterns) grâce à la commande PSUBSCRIBE dans Redis. PSUBSCRIBE vous permet de vous abonner simultanément à plusieurs canaux qui correspondent à un motif spécifié. C'est très utile lorsque vous souhaitez recevoir des messages provenant d'un groupe de canaux apparentés sans avoir à vous y abonner individuellement un par un.

Terminal 1 : Abonnement par motif

Puisque vous vous êtes désabonné de mychannel à l'étape précédente, le Terminal 1 devrait maintenant afficher une invite Redis classique.

Dans le Terminal 1, abonnez-vous aux canaux correspondant au motif news.* à l'aide de la commande PSUBSCRIBE :

PSUBSCRIBE news.*

La sortie ressemblera à ceci :

Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "news.*"
3) (integer) 1

Analysons cette sortie :

  • "psubscribe" : Indique que vous vous êtes abonné avec succès à un motif.
  • "news.*" : Le motif auquel vous vous êtes abonné. Le .* est un caractère générique (wildcard) qui correspond à n'importe quelle suite de caractères.
  • (integer) 1 : Le nombre de motifs auxquels vous êtes actuellement abonné.

Terminal 2 : Publier sur des canaux correspondant au motif

Rendez-vous dans le Terminal 2 et publiez un message sur le canal news.sports à l'aide de la commande PUBLISH :

PUBLISH news.sports "Sports news update!"

La sortie dans le Terminal 2 indiquera le nombre d'abonnés ayant reçu le message :

(integer) 1

Observer la correspondance de motifs

Revenez dans le Terminal 1 (où vous vous êtes abonné au motif). Vous devriez y voir le message que vous venez de publier :

1) "pmessage"
2) "news.*"
3) "news.sports"
4) "Sports news update!"

Cela montre :

  • "pmessage" : Indique qu'il s'agit d'un message reçu via un motif d'abonnement.
  • "news.*" : Le motif qui a déclenché la correspondance.
  • "news.sports" : Le canal réel sur lequel le message a été publié.
  • "Sports news update!" : Le contenu du message.

Tester plusieurs canaux

Dans le Terminal 2, essayez de publier sur différents canaux qui correspondent ou non au motif :

PUBLISH news.technology "New AI breakthrough!"
PUBLISH news.weather "Sunny skies ahead!"
PUBLISH sports.basketball "This won't match the pattern"

Observez dans le Terminal 1 que seuls les messages des canaux commençant par news.* sont reçus, tandis que celui de sports.basketball est ignoré car il ne correspond pas au motif news.*.

Important : Laissez les deux terminaux et leurs sessions redis-cli actifs. L'abonnement par motif montre comment vous pouvez écouter plusieurs canaux apparentés en même temps.

Résumé

Dans ce lab, vous avez exploré les fondamentaux de la messagerie Pub/Sub de Redis. Vous avez appris à vous abonner à des canaux à l'aide de la commande SUBSCRIBE, à y publier des messages avec PUBLISH, à vous désabonner grâce à UNSUBSCRIBE, ainsi qu'à utiliser des motifs d'abonnements globaux avec PSUBSCRIBE. Ces commandes sont essentielles pour concevoir des applications de messagerie en temps réel performantes avec Redis.