Mensageria Pub/Sub do Redis

RedisBeginner
Pratique Agora

Introdução

Neste laboratório, você explorará o sistema de mensageria Pub/Sub (Publicação/Subscrição) do Redis. Você aprenderá como se inscrever em canais, publicar mensagens e cancelar inscrições. Este laboratório o guiará pelas operações fundamentais usando os comandos SUBSCRIBE, PUBLISH, UNSUBSCRIBE e PSUBSCRIBE.

Inscrever-se em um Canal com SUBSCRIBE

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

Terminal 1: Inscrever-se no Canal

Abra o seu primeiro terminal (vamos chamá-lo de Terminal 1). Você pode usar o terminal Xfce fornecido no ambiente do 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": Indica que você se inscreveu com sucesso em um canal.
  • "mychannel": Este é o nome do canal em que você se inscreveu.
  • (integer) 1: Este é o número de canais aos quais você está inscrito no momento.

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 cancelará sua inscrição no canal. Usaremos um segundo terminal para publicar mensagens na próxima etapa.

Publicar Mensagens com PUBLISH

Nesta etapa, você aprenderá como publicar mensagens em um canal no Redis usando o comando PUBLISH. A publicação de mensagens é a principal funcionalidade 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 (vamos chamá-lo 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

Nesse 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 onde a mensagem foi publicada
  • "Hello, Redis!": O conteúdo real da mensagem

Testar Mensagens em Tempo Real

Agora você pode experimentar o envio de 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 diferentes mensagens 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 (Terminal 1 e Terminal 2) com suas sessões do redis-cli ativas. Continuaremos usando ambos os terminais nas próximas etapas.

Cancelar Subscrição com UNSUBSCRIBE

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

Terminal 1: Sair do Modo de Subscrição

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

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

  1. Pressione Ctrl+C para sair do modo de subscrição

  2. Você deverá ver que a sessão do redis-cli é encerrada 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 estritamente necessário, já que a desconexão anterior já cancelou sua inscrição):

    UNSUBSCRIBE mychannel
    

Nota: Quando você pressionou Ctrl+C, você na verdade já se desconectou de todas as subscrições. O comando UNSUBSCRIBE é mostrado para fins de demonstração, mas na prática, desconectar-se cancela automaticamente a sua subscriçã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": Indica que você cancelou a subscrição de um canal.
  • "mychannel": O nome do canal cuja subscrição foi cancelada.
  • (integer) 0: O número de canais aos quais você está inscrito no momento. Agora é 0 porque você cancelou a subscrição de mychannel.

Terminal 2: Testar Publicação Após Cancelar Subscriçã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 subscrição do canal no Terminal 1.

Verificar que Nenhuma Mensagem Foi Recebida

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

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

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

Subscrição por Padrão com PSUBSCRIBE

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

Terminal 1: Subscrição por Padrão

Como você cancelou a subscrição de mychannel na etapa anterior, o Terminal 1 agora deve mostrar um prompt normal do Redis.

No Terminal 1, inscreva-se em canais que correspondem 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": Indica que você se inscreveu com sucesso em um padrão.
  • "news.*": Este é o padrão ao qual você se inscreveu. O .* é um caractere curinga (wildcard) que corresponde a quaisquer caracteres.
  • (integer) 1: Este é o número de padrões aos quais você está inscrito no momento.

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 a 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 onde 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 as mensagens dos canais news.* são recebidas, enquanto sports.basketball não é recebida porque não corresponde ao padrão news.*.

Importante: Mantenha ambos os terminais e suas sessões do redis-cli ativas. A subscrição por padrão demonstra como você pode escutar vários canais relacionados simultaneamente.

Resumo

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