Acredito que você já tenha ouvido falar sobre o conceito de publisher/subscriber
, certo? E você sabia que o Redis possui essa comunicação nativamente?
De maneira muito sucinta, vou mostar um exemplo prático e simples utilizando Redis e Python usando a comunicação publish/subscriber
.
O que preciso?
Para esse exemplo são necessárias três ferramentas instaladas na sua máquina:
- Python 3.8 ou superior
- pip
- Redis
Os detalhes de instalação vou pular porque esse exemplo pode ser feito em qualquer SO. Basta seguir a documentação de instalação de cada item.
Por fim, uma vez instalado o pip, vamos instalar o redis (ah, para quem não sabe, o pip
seria o npm
do python) com o comando abaixo:
pip3 install redis
O Script
Crie um arquivo chamado app.py
e cole esse script:
from redis import StrictRedis
from time import strftime, sleep
client = StrictRedis(host="localhost", port=6379)
subscriber = client.pubsub()
subscriber.psubscribe('channel_test')
while True:
messages = subscriber.get_message()
now = strftime('%d/%m/%Y:%H:%M:%S')
if messages:
print(f'{now} - {messages["data"]}')
else:
print(f'{now} - Nothing here!!!')
sleep(1)
Explicando cada linha
Importação do redis para o projeto (obviously) , importação de formatação de data da classe time e também o sleep, que vai fazer com que nosso while sofra uma pausa de 1 segundo em cada iteração.
from redis import StrictRedis
from time import strftime, sleep
Conexão com o redis
client = StrictRedis(host="localhost", port=6379)
Especificando que vamos nos subscrever num canal chamado channel_test
subscriber = client.pubsub()
subscriber.psubscribe('channel_test')
Bloco while que vai ficar rodano sem parar o processo de subscribe
. Uma vez que seja publicada alguma mensagem no canal channel_test
, vai ser printado no console.
while True:
messages = subscriber.get_message()
now = strftime('%d/%m/%Y:%H:%M:%S')
if messages:
print(f'{now} - {messages["data"]}')
else:
print(f'{now} - Nothing here!!!')
sleep(1)
Publicando no canal
Redis instalado? Tá na hora de usar esse carinha.
No terminal/prompt, rode o comando:
redis-cli
Se tudo tiver ocorrido bem na instalação e o redis estiver rodando, você deve estar com o shell do redis habilitado.
Para publicar, basta digitar:
publish channel_test "um conteúdo qualquer aqui"
Ah, a gente ainda não executou nosso script python. Pelo terminal, acesse o diretório de onde está nosso app.py e execute com o comando:
python app.py
Resultado
Script rodando? Redis rodando? Publish realizado?
Pah, a mágica acontece ...
Agora exercite sua criatividade e implemente outras coisas bacanas usando redis
como publisher/subscriber
e seja feliz =D =D =D
Top comments (2)
Muito bacana, mas se eu quiser que um script em python faça uma publish, é possivel?
Claro que sim, vou atualizar esse exemplo e fazer uma aplicação python realizar o publish e a outra ser o subscriber!!