Skip to content

Instantly share code, notes, and snippets.

@rjungemann
Forked from tobi/client.rb
Created May 29, 2010 18:09
Show Gist options
  • Save rjungemann/418422 to your computer and use it in GitHub Desktop.
Save rjungemann/418422 to your computer and use it in GitHub Desktop.
Simplistic Ruby message queue
Very efficient message queue backed by redis, using msgpack for serialization.
require 'rubygems'
require 'redis'
require 'digest/md5'
require 'msgpack'
$redis = Redis.new
class Queue
def initialize(name)
@name = name
end
def push(object)
hash = Digest::MD5.hexdigest(object.to_s)
$redis.set("msg:#{hash}", MessagePack.pack(object))
$redis.rpush("queue:#{@name}", hash)
end
def subscribe
loop do
hash = $redis.blpop("queue:#{@name}", 0)[1]
object = $redis.get("msg:#{hash}")
begin
yield MessagePack.unpack(object)
$redis.del("msg:#{hash}")
rescue
$redis.lpush("queue:#{@name}", hash)
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment