Mensagens Pub/Sub do Redis

RedisBeginner
Pratique Agora

Introdução

Neste laboratório, você explorará o sistema de mensagens Pub/Sub do Redis. Você aprenderá a se inscrever em canais, publicar mensagens e cancelar a inscrição. Este laboratório irá guiá-lo pelas operações fundamentais usando os comandos SUBSCRIBE, PUBLISH, UNSUBSCRIBE e PSUBSCRIBE.

Este é um Lab Guiado, que fornece instruções passo a passo para ajudá-lo a aprender e praticar. Siga as instruções cuidadosamente para completar cada etapa e ganhar experiência prática. Dados históricos mostram que este é um laboratório de nível iniciante com uma taxa de conclusão de 100%. Recebeu uma taxa de avaliações positivas de 80% dos estudantes.

Inscrever-se em um Canal com SUBSCRIBE

Nesta etapa, você aprenderá a se inscrever em um canal no Redis usando o comando SUBSCRIBE. Inscrever-se em um canal permite que você receba mensagens publicadas nesse canal. Este é um conceito fundamental no sistema de mensagens Pub/Sub do Redis.

Terminal 1: Inscrever-se no Canal

Abra seu primeiro terminal (chamaremos este de Terminal 1). Você pode usar o terminal Xfce fornecido no ambiente LabEx.

Conecte-se ao servidor Redis usando o comando redis-cli:

redis-cli

Você deverá ver o prompt do Redis: 127.0.0.1:6379>.

Inscreva-se em um canal chamado mychannel usando o comando SUBSCRIBE:

SUBSCRIBE mychannel

A saída será semelhante a esta:

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

Vamos analisar a saída:

  • "subscribe": Isso indica que você se inscreveu com sucesso em um canal.
  • "mychannel": Este é o nome do canal ao qual você se inscreveu.
  • (integer) 1: Este é o número de canais aos quais você está atualmente inscrito.

Importante: Mantenha o Terminal 1 aberto com a sessão do redis-cli ativa e inscrita no canal. NÃO feche este terminal nem pressione Ctrl+C, pois isso o desinscreveria do canal. Usaremos um segundo terminal para publicar mensagens na próxima etapa.

Publicar Mensagens com PUBLISH

Nesta etapa, você aprenderá a publicar mensagens em um canal no Redis usando o comando PUBLISH. Publicar mensagens é a funcionalidade principal do sistema Pub/Sub, permitindo que você envie dados para todos os assinantes de um canal específico.

Terminal 2: Publicar Mensagens

Abra um segundo terminal (chamaremos este de Terminal 2). Você pode abrir uma nova aba no seu terminal Xfce.

Conecte-se ao servidor Redis usando o comando redis-cli:

redis-cli

Você deverá ver o prompt do Redis: 127.0.0.1:6379>.

Agora, publique uma mensagem no canal mychannel usando o comando PUBLISH:

PUBLISH mychannel "Hello, Redis!"

A saída no Terminal 2 será o número de clientes que receberam a mensagem:

(integer) 1

Neste caso, a saída é (integer) 1 porque você tem uma inscrição ativa em mychannel no Terminal 1 da etapa anterior.

Observar a Mensagem no Terminal 1

Agora, volte para o Terminal 1 (onde você se inscreveu em mychannel na Etapa 1). Você deverá ver a mensagem que acabou de publicar exibida em tempo real:

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

Isso mostra:

  • "message": Indica que esta é uma mensagem publicada
  • "mychannel": O canal para o qual a mensagem foi publicada
  • "Hello, Redis!": O conteúdo real da mensagem

Testar Mensagens em Tempo Real

Você pode agora experimentar mensagens em tempo real:

  1. Volte para o Terminal 2 e publique mais mensagens
  2. Mude para o Terminal 1 para vê-las aparecer instantaneamente
  3. Tente publicar mensagens diferentes para observar a comunicação ao vivo

Exemplo - no Terminal 2:

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

Importante: Mantenha ambos os Terminais 1 e Terminal 2 com suas sessões do redis-cli ativas. Continuaremos usando ambos os terminais nas próximas etapas.

Cancelar Inscrição com UNSUBSCRIBE

Nesta etapa, você aprenderá como cancelar a inscrição de um canal no Redis usando o comando UNSUBSCRIBE. Cancelar a inscrição remove um cliente da lista de assinantes de um canal específico, impedindo-o de receber mensagens futuras publicadas nesse canal.

Terminal 1: Sair do Modo de Assinatura

Vá para o Terminal 1 (onde você está atualmente inscrito em mychannel). Você deverá ver o status da assinatura mostrando "Reading messages... (press Ctrl-C to quit)".

Como o Terminal 1 está no modo de assinatura, você não pode executar comandos Redis regulares diretamente. Para cancelar a inscrição, você precisa primeiro sair do modo de assinatura:

  1. Pressione Ctrl+C para sair do modo de assinatura

  2. Você deverá ver que a sessão do redis-cli termina e retorna ao prompt do terminal

  3. Reconecte-se ao Redis:

    redis-cli
  4. Agora você pode executar o comando UNSUBSCRIBE (embora não seja necessário, pois a desconexão já cancelou sua inscrição):

    UNSUBSCRIBE mychannel

Nota: Ao pressionar Ctrl+C, você na verdade já se desconectou de todas as assinaturas. O comando UNSUBSCRIBE é mostrado para fins de demonstração, mas na prática, desconectar cancela automaticamente sua inscrição de todos os canais.

A saída no Terminal 1 será semelhante a esta:

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

Vamos analisar a saída:

  • "unsubscribe": Isso indica que você cancelou a inscrição de um canal.
  • "mychannel": Este é o nome do canal do qual você cancelou a inscrição.
  • (integer) 0: Este é o número de canais aos quais você está atualmente inscrito. Agora é 0 porque você cancelou a inscrição de mychannel.

Terminal 2: Testar Publicação Após Cancelamento de Inscrição

Agora mude para o Terminal 2 e publique outra mensagem em mychannel:

PUBLISH mychannel "Is anyone still there?"

A saída no Terminal 2 será:

(integer) 0

Isso indica que nenhum cliente recebeu a mensagem porque você cancelou a inscrição do canal no Terminal 1.

Verificar se Nenhuma Mensagem Foi Recebida

Olhe para o Terminal 1 - você deverá notar que nenhuma nova mensagem aparece porque você cancelou a inscrição do canal.

Isso demonstra como cancelar a inscrição de um canal impede que você receba mensagens futuras publicadas nesse canal, enquanto o publicador ainda pode enviar mensagens (mas ninguém as receberá).

Importante: Mantenha ambos os terminais e suas sessões do redis-cli ativos para a próxima etapa.

Assinar Padrões com PSUBSCRIBE

Nesta etapa, você aprenderá a se inscrever em canais usando padrões com o comando PSUBSCRIBE no Redis. PSUBSCRIBE permite que você se inscreva em múltiplos canais que correspondem a um padrão especificado. Isso é útil quando você deseja receber mensagens de um grupo de canais relacionados sem se inscrever em cada um individualmente.

Terminal 1: Assinar Padrões

Como você cancelou a inscrição em mychannel na etapa anterior, o Terminal 1 agora deve mostrar um prompt regular do Redis.

No Terminal 1, inscreva-se em canais que correspondam ao padrão news.* usando o comando PSUBSCRIBE:

PSUBSCRIBE news.*

A saída será semelhante a esta:

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

Vamos analisar a saída:

  • "psubscribe": Isso indica que você se inscreveu com sucesso em um padrão.
  • "news.*": Este é o padrão ao qual você se inscreveu. O .* é um curinga que corresponde a quaisquer caracteres.
  • (integer) 1: Este é o número de padrões aos quais você está atualmente inscrito.

Terminal 2: Publicar em Canais que Correspondem ao Padrão

Vá para o Terminal 2 e publique uma mensagem no canal news.sports usando o comando PUBLISH:

PUBLISH news.sports "Sports news update!"

A saída no Terminal 2 será o número de assinantes que receberam a mensagem:

(integer) 1

Observar Correspondência de Padrões

Volte para o Terminal 1 (onde você se inscreveu no padrão). Você deverá ver a mensagem que acabou de publicar:

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

Isso mostra:

  • "pmessage": Indica que esta é uma mensagem correspondente a um padrão
  • "news.*": O padrão que correspondeu
  • "news.sports": O canal real para o qual a mensagem foi publicada
  • "Sports news update!": O conteúdo da mensagem

Testar Múltiplos Canais

No Terminal 2, tente publicar em diferentes canais que correspondem ao padrão:

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

Observe no Terminal 1 que apenas os canais news.* são recebidos, enquanto sports.basketball não é, pois não corresponde ao padrão news.*.

Importante: Mantenha ambos os terminais e suas sessões do redis-cli ativas. A inscrição por padrão demonstra como você pode ouvir múltiplos canais relacionados simultaneamente.

Resumo

Neste laboratório, você explorou os fundamentos da mensagem Pub/Sub do Redis. Você aprendeu a se inscrever em canais usando o comando SUBSCRIBE, publicar mensagens em canais usando o comando PUBLISH, cancelar a inscrição em canais usando o comando UNSUBSCRIBE e se inscrever em canais usando padrões com o comando PSUBSCRIBE. Esses comandos são essenciais para construir aplicações de mensagens em tempo real com o Redis.