Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

Redis pub/sub nos trilhos


A implementação de Redis#subscribe é um loop que assumirá o controle da thread atual para ouvir os eventos. Isso significa que o processo de inicialização é interrompido ao soltar uma assinatura no contexto de uma classe Rails da maneira que você mostrou.

Você pode tentar envolver a chamada em um thread, mas essa abordagem criaria literalmente uma nova assinatura toda vez que essa classe fosse carregada em um novo processo, como um console de trilhos ou vários unicórnios. Além disso, você precisa ter cuidado com o estado compartilhado e outros problemas de encadeamento. Isso provavelmente não é o que você quer.

É melhor iniciar um processo diferente que carregue o ambiente Rails e se inscreva no redis separadamente do(s) processo(s) que atendem às solicitações da web. Pode ser uma tarefa de rake como a seguinte:
namespace :subscribe do
  task :redis => :environment do
    $redis.subscribe("bravo") do |on|
      on.message do |channel, message|
        Rails.logger.info("Broadcast on channel #{channel}: #{message}")
        OtherClass.some_method # yada yada
      end
    end
  end
end