Project

havanna

0.01
No commit activity in last 3 years
No release in over 3 years
Ruby workers for Disque.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

>= 0

Runtime

>= 0
>= 0
 Project Readme

Havanna

Ruby workers with Disque.

Usage

Similar to Rack's config.ru, Havanna has an entry point file where you explicitly declare handlers for your queues. The minimum you need to use Havanna is to create a Havannafile:

require "app"

Havanna.run(Hello: -> job {
  puts("Hello, #{job}")
})

Now on the command line, start Havanna:

$ havanna start

In a different window, try queuing a job using Disque's built-in client:

$ disque addjob Hello world 5000

As expected, you should see the string "Hello, world" in the terminal where you started Havanna.

Workers

If you prefer to use classes to model your workers, there's Havanna::Worker. For instance, this could be workers/mailer.rb:

require "havanna/worker"

class Mailer < Havanna::Worker
  def call(item)
    puts("Emailing #{item}...")

    # Actually do it.
  end
end

Then your Havannafile would look like this:

require "app"

Havanna.run(Mailer)

Administration

Once you're up and running, deploy your workers with -d for daemonization:

$ havanna start -d

Stop the worker pool by issuing a stop command:

$ havanna stop

This will wait for all workers to exit gracefully.

For more information, run:

$ havanna -h

Design notes

Havanna assumes that your workers perform a fair amount of I/O (probably one of the most common reasons to send jobs to the background). We will optimize Havanna for this use case.

Currently, Havanna runs multiple threads per worker. However, we may fork(2) if we find that's better for multiple-core utilization under MRI.

Alternatives

It's very likely that Havanna is not for you. While I use it in production, it's small and doesn't do much.

These are the alternatives I know of in Rubyland:

  • Disc: By my friend pote. It supports more customization of workers and queues, takes configuration from environment variables and can take advantage of Celluloid if you're using it.

  • DisqueJockey: I don't know much about this one, but apparently it's even more configurable, has a DSL and (naturally) might be a better fit if you use/like Rails.

About the name

Havanna is inspired by Ost and ost(1). soveran named Ost after a café, and I happened to be sitting at another café when I started to work on this library. Its name: Havanna.

By the way, before becoming a café, Havanna produced the best alfajores in Argentina. They only had one store in Mar del Plata (~400km away from Buenos Aires), so it became a tradition to bring these exquisite alfajores when you returned from a trip to the beach. Several years later they opened stores in Buenos Aires and elsewhere and became a coffee shop.