Pub / Sub com Laravel e Redis

Eu nem precisava fazer este artigo, pois na documentação do laravel tem exemplos, explica tudo. Mas beleza!

Para quem não sabe, Redis é um banco de dados NoSQL e ele funciona com a idéia de chave-valor. O valor (e também a chave) pode ser qualquer coisa, eu uso muito para arrays e até mesmo para views que não mudam muito e podem ser cacheadas para carregar uma página web mais rápido. Se quiser saber mais sobre Redis, da-lhe Google.

O Laravel é um framework para PHP robusto e que faz praticamente tudo o que você precisar, é simplesmente perfeito! Na empresa, usamos ele em todos os nosso projetos. Claro, usamos outras tecnologias também, mas a base de tudo gira em torno do Laravel.

Primeiro, precisamos criar um comando no Artisan para testarmos o nosso Subscribe.

1
php artisan make:command SubTestCommand

Isso, agora vai lá no seu arquivo SubTestCommand.php, adicione a Facade do Redis:

1
use Illuminate\Support\Facades\Redis;

Dê uma assinatura pra ele “redis:subscribe“, uma descrição “Redis subscribe test“ ou qualquer outra descrição que você quiser, ou copie como está na documentação do laravel, você quem sabe.

Continuando… No método handle que é onde executa o comando, coloque o seguinte:

1
2
3
4
5
Redis::psubscribe(['casa/*'], function ($message, $channel) {
// $message é a mensagem recebida, obviamente
// $channel é o canal o qual foi enviada a publicação
echo "\nMensagem: ".$message."\n\nCanal: ".json_encode(explode('/', $channel))."\n";
});

Na documentação do laravel existe duas formas de usar o subscribe, que é Redis::subscribe() e Redis::psubscribe() a diferença entre um e outro é que o primeiro não aceita curinga (wildcard) e o segundo aceita. Mas, se você quer saber mais, olhe ai na documentação, lá explica tudo. Mas o que eu expliquei aqui já é o suficiente acredito.

Beleza, tudo lindo e funcionando até agora. Mas temos que executar o comando e criar um publish né? Certo, para executar o comando que criamos no Laravel faça o seguinte

1
php artisan redis:subscribe

Certo, agora precisamos enviar uma publicação para o canal “casa“, para testes vamos usar o Laravel Tinker, corre lá no terminal, onde está instalado o Laravel que você está usando para testes, e digite o comando:

1
php artisan tinker

O Tinker será iniciado e nele iremos digitar o seguinte:

1
Illuminate\Support\Facades\Redis::publish('casa/sala', json_encode(['comando' => 'ligar-luz']));

Repare que na janela do terminal onde está executando o comando artisan redis:subscribe irá receber uma mensagem. Pronto, agora faça a seu gosto.

No artigo, eu usei exemplo enviando um comando para uma casa, mas, você pode usar isso em qualquer lugar, seja software, hardware ou IoT, até porquê quando se diz respeito a IoT eu prefiro usar o MQTT.


Dicas por Gercil Junio - https://gercil.me

Proudly powered by Hexo and Theme by Hacker
© 2020 Faz-B Man