remq-rb Build Status

A Ruby client for Remq, a Redis-based protocol for building fast, durable message queues.

WARNING: In early-stage development, API not stable. If you've used a previous version, you'll most likely have to clear all previously published messages in order to upgrade to the latest version.

Installation

gem install remq

Usage

Producer:

require 'json'
require 'remq'

$remq = Remq.new

message = { event: 'signup', account_id: 694 }

id = $remq.publish('events.accounts', JSON.dump(message))

Consumer:

require 'json'
require 'remq'

$remq = Remq.new

last_id_key = $remq.key('cursor', 'consumer-1')
last_id = $remq.redis.get(last_id_key) || 0

$remq.subscribe('events.*', from_id: last_id) do |channel, message|
  last_id = message.id

  # by persisting the last_id every 10 messages, a maximum of
  # 10 messages will be replayed in the case of consumer failure
  if last_id % 10 == 0
    $remq.redis.set(last_id_key, last_id)
  end

  message.body = JSON.parse(message.body)

  puts "Received message on '#{channel}' with id: #{message.id}"
  puts "Account signed up with id: #{message.body['account_id']}"
end

Flush:

# TODO: not implemented yet