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.