sql >> Database >  >> NoSQL >> Redis

Redis pub/sub op rails

De implementatie van Redis#subscribe is een lus die de controle over de huidige thread overneemt om naar gebeurtenissen te luisteren. Dit betekent dat het opstartproces wordt stopgezet wanneer een abonnement in de context van een Rails-klasse wordt geplaatst op de manier die u hebt laten zien.

Je zou kunnen proberen de oproep in een thread te verpakken, maar deze aanpak zou letterlijk een nieuw abonnement creëren elke keer dat deze klasse in een nieuw proces laadt, zoals een railsconsole of meerdere eenhoorns. Bovendien moet u voorzichtig zijn met gedeelde status en andere problemen met threading. Dit is waarschijnlijk niet wat je wilt.

U kunt het beste een ander proces starten dat de rails-omgeving laadt en zich abonneert op redis, apart van de proces(sen) die webverzoeken dienen. Het kan een rake-taak zijn zoals de volgende:

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



  1. MongoDB countDocuments()

  2. MongoDB-CR-verificatie mislukt

  3. Mongoose-indexering in productiecode

  4. Verbinding maken met Redis in Docker Container vanaf hostcomputer