Project

insque

0.01
No commit activity in last 3 years
No release in over 3 years
Instant queue. Background processing and message driven communication tool. Faster and simplier alternative to Resque.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

Runtime

> 2
 Project Readme

Insque

Instant queue. Background processing and message driven communication tool. Faster and simplier alternative to Resque.

Installation

Add this line to your application's Gemfile:

gem 'insque'

And then execute:

$ bundle

Or install it manually:

$ gem install insque

Usage

At first you need to generate initializer and redis config file. Pass your sender name as parameter. Sender name is the unique identifier of your instance of insque. You can use several instances of insque to create message driven communication system.

$ rails g insque:initializer somesender

Sending

To broadcast message use:

Insque.broadcast :message_name, { params: { some: :param } }

There is an easy way to use insque as background jobs processing. You can use send_later method to call any method of your rails models in background:

@model = MyModel.first
@model.send_later :mymethod, 'some', 'params'

You'll need a special slow listener running to make this work.

Insque.slow_listen

there is a matching slow janitor as well:

Insque.slow_janitor

Recieving

To start recieving messages you need to:

  1. Create handler method in Insque module. First part of handler name is the name of the message sender.

    def somesender_message_name message
      #TODO: Handle message somehow
    end
  2. Call listen method in some background process or rake task:

    Insque.listen

    or just run bundle exec rake insque:listener from your console.

  3. Call janitor method in some background process or rake task. Janitor will reissue failed messages or report error if message fails again. Janitor treats message as failed if it was not processed for an hour after broadcast or reissue.

    Insque.janitor

    or just run bundle exec rake insque:janitor from your console.

Run All At Once

There is a simple way to run all insque workers, both regular and slow in a single multi-threaded process:

bundle exec rake insque:run

Redis Cluster Support

To make insque run on Redis Cluster add this line to your application's Gemfile:

gem 'redis_cluster'

and change redis.yml file accordingly:

production:
- host: cluster_host1
  port: 1234
- host: cluster_host2
  port: 1234
- host: cluster_host3
  port: 1234

Daemonizing

If you want to run insque as a daemon consider using foreman for this.

If you deploy with capistrano you may want to try a version of foreman with build in capistrano support.

Add foreman to your Gemfile:

gem 'foreman' # OR
gem 'foreman-capistrano'

Install it:

$ bundle install  

Create Procfile:

insque: bundle exec rake insque:run

Run foreman from your console:

$ bundle exec foreman start

For production use modify your capistrano deploy script somewhat like this:

set :default_environment, {'PATH' => "/sbin:$PATH"}  # Optional. Useful if you get errors because start or restart command not found
set :foreman_concurrency, "\"insque=1\"" # How many processes of each type do you want
require 'foreman/capistrano'

after "deploy", "foreman:export"  # Export Procfile as a set of upstart jobs
after "deploy", "foreman:restart" # You will need upstart installed on your server for this to work.

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Added some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request