class Volt::MessageBus::Redis

Public Class Methods

new(volt_app) click to toggle source
# File lib/volt/message_bus/redis_message_bus.rb, line 17
def initialize(volt_app)
  @redis = new_connection
end

Public Instance Methods

disconnect!() click to toggle source

waits for all messages to be flushed and closes connections

# File lib/volt/message_bus/redis_message_bus.rb, line 57
def disconnect!
  raise "Not implemented"
end
new_connection() click to toggle source
# File lib/volt/message_bus/redis_message_bus.rb, line 45
def new_connection
  msg_bus = Volt.config.message_bus
  if msg_bus && (opts = msg_bus.connect_options)
    ::Redis.new(opts)
  elsif ENV['REDIS_URL']
    ::Redis.new(url: ENV["REDIS_URL"])
  else
    ::Redis.new
  end
end
publish(channel_name, message) click to toggle source

publish should push out to all subscribed within the volt cluster.

# File lib/volt/message_bus/redis_message_bus.rb, line 41
def publish(channel_name, message)
  @redis.publish(channel_name.to_sym, message)
end
subscribe(channel_name, &block) click to toggle source

Subscribe should return an object that you can call .remove on to stop the subscription.

# File lib/volt/message_bus/redis_message_bus.rb, line 23
def subscribe(channel_name, &block)
  sub_redis = new_connection

  Thread.new do
    # Since the Redis driver does not have a connection pool, we create a
    # new connection each time we subscribe.
    # Note: internally volt does only 1 subscription.
    sub_redis.subscribe(channel_name.to_sym) do |on|
      on.message do |channel_name, message|
        block.call(message)
      end
    end
  end

  Subscription.new(sub_redis)
end