Mensageria Pub/Sub do Redis

RedisBeginner
Pratique Agora

Introdução

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

Inscrever-se em um canal com SUBSCRIBE

Nesta etapa, você aprenderá a se inscrever em um canal do Redis usando o comando SUBSCRIBE. Inscrever-se em um canal permite receber as mensagens publicadas nele. Esse é um conceito fundamental do sistema de mensageria Pub/Sub do Redis.

Terminal 1: Inscrever-se no canal

Abra o primeiro terminal (que chamaremos de Terminal 1). Você pode usar o terminal Xfce disponibilizado 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

Veja o que cada parte da saída significa:

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

Importante: mantenha o Terminal 1 aberto, com a sessão do redis-cli ativa e inscrita no canal. NÃO feche esse terminal nem pressione Ctrl+C, pois isso cancelaria sua inscrição no 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 do Redis usando o comando PUBLISH. A publicação de mensagens é a principal funcionalidade do sistema Pub/Sub, permitindo enviar dados a todos os assinantes de um canal específico.

Terminal 2: Publicar mensagens

Abra um segundo terminal (que chamaremos de Terminal 2). Você pode abrir uma nova aba no 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 existe uma inscrição ativa em mychannel no Terminal 1, criada na etapa anterior.

Observar a mensagem no Terminal 1

Agora volte ao Terminal 1 (onde você se inscreveu em mychannel na etapa 1). A mensagem que você acabou de publicar deverá aparecer em tempo real:

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

Isso indica:

  • "message": informa que esta é uma mensagem publicada.
  • "mychannel": é o canal no qual a mensagem foi publicada.
  • "Hello, Redis!": é o conteúdo da mensagem.

Testar a mensageria em tempo real

Agora você pode experimentar a troca de mensagens em tempo real. Volte ao Terminal 2 e publique mais mensagens; em seguida, alterne para o Terminal 1 para vê-las aparecer instantaneamente. Experimente 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 o Terminal 1 e o Terminal 2 abertos, com as respectivas sessões do redis-cli ativas. Continuaremos usando os dois terminais nas próximas etapas.

Cancelar a inscrição com UNSUBSCRIBE

Nesta etapa, você aprenderá a cancelar a inscrição em um canal do Redis usando o comando UNSUBSCRIBE. O cancelamento remove um cliente da lista de assinantes de um canal específico, impedindo-o de receber novas mensagens publicadas nesse canal.

Terminal 1: Sair do modo de inscrição

Acesse o Terminal 1 (onde você está inscrito atualmente em mychannel). Você deverá ver o status da inscrição com a mensagem "Reading messages... (press Ctrl-C to quit)".

Como o Terminal 1 está no modo de inscrição, não é possível executar comandos comuns do Redis diretamente. Pressione Ctrl+C para sair desse modo e retornar ao prompt do terminal. Em seguida, reconecte-se ao Redis:

redis-cli

Agora execute o comando UNSUBSCRIBE. Embora a desconexão já tenha removido a inscrição, este comando demonstra a resposta de cancelamento de inscrição do Redis:

UNSUBSCRIBE mychannel

Observação: ao pressionar Ctrl+C, você já havia sido desconectado de todas as inscrições. O comando UNSUBSCRIBE é apresentado apenas para fins demonstrativos; na prática, a desconexão cancela automaticamente sua inscrição em todos os canais.

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

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

Veja o que cada parte da saída significa:

  • "unsubscribe": indica que você cancelou a inscrição em um canal.
  • "mychannel": é o nome do canal cuja inscrição foi cancelada.
  • (integer) 0: é o número de canais nos quais você está inscrito atualmente. Agora esse número é 0 porque você cancelou a inscrição em mychannel.

Terminal 2: Testar a publicação após cancelar a inscrição

Agora alterne 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, pois você cancelou a inscrição no canal usando o Terminal 1.

Confirmar que nenhuma mensagem foi recebida

Observe o Terminal 1: nenhuma mensagem nova deverá aparecer, pois você cancelou a inscrição no canal.

Isso demonstra que cancelar a inscrição em um canal impede o recebimento de novas mensagens publicadas nele, enquanto o publicador ainda pode enviar mensagens (mas ninguém as receberá).

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

Inscrição por padrão com PSUBSCRIBE

Nesta etapa, você aprenderá a se inscrever em canais usando padrões com o comando PSUBSCRIBE do Redis. O comando PSUBSCRIBE permite acompanhar vários canais que correspondam 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 individualmente.

Terminal 1: Inscrição por padrão

Como você cancelou a inscrição em mychannel na etapa anterior, o Terminal 1 deverá exibir novamente o prompt normal do Redis.

No Terminal 1, inscreva-se nos 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

Veja o que cada parte da saída significa:

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

Terminal 2: Publicar em canais correspondentes ao padrão

Acesse 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 do padrão

Volte ao Terminal 1 (onde você se inscreveu no padrão). A mensagem que você acabou de publicar deverá aparecer:

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

Isso indica:

  • "pmessage": informa que esta é uma mensagem correspondente a um padrão.
  • "news.*": é o padrão que correspondeu à mensagem.
  • "news.sports": é o canal específico no qual a mensagem foi publicada.
  • "Sports news update!": é o conteúdo da mensagem.

Testar vários canais

No Terminal 2, tente publicar em diferentes canais que correspondam 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. A mensagem de sports.basketball não será recebida porque esse canal não corresponde ao padrão news.*.

Importante: mantenha os dois terminais e suas respectivas sessões do redis-cli ativos. A inscrição por padrão demonstra como ouvir simultaneamente vários canais relacionados.

Resumo

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