sql >> Base de Datos >  >> NoSQL >> Redis

Redis pub/sub on rails

La implementación de Redis#subscribe es un bucle que asumirá el control del subproceso actual para escuchar los eventos. Esto significa que el proceso de arranque se detiene cuando se coloca una suscripción en el contexto de una clase de Rails de la manera que se muestra.

Podría intentar envolver la llamada en un hilo, pero este enfoque literalmente crearía una nueva suscripción cada vez que esta clase se carga en un nuevo proceso, como una consola de rieles o múltiples unicornios. Además, debe tener cuidado con el estado compartido y otros problemas de subprocesamiento. Probablemente esto no sea lo que quieres.

Es mejor que inicie un proceso diferente que cargue el entorno de Rails y se suscriba a redis por separado de los procesos que atienden las solicitudes web. Podría ser una tarea de rake como la siguiente:

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