Jorb
I uh, I say you did a great jorb out there
What
Jorb is a simple queue-based jobs processing system for Elixir. Works great with Amazon SQS.
How
Define your job module:
defmodule HelloWorld.Job do
use Jorb.Job
def read_queues do
["high_priority_greetings", "regular_greetings"]
end
def write_queue(greeting) do
if greeting["name"] == "Zeke" do
"high_priority_greetings"
else
"regular_greetings"
end
end
def perform(greeting) do
IO.puts "Hello, #{greeting["name"]}!"
:ok
end
end
Enqueue work:
HelloWorld.Job.enqueue(%{"name" => "Ray"})
Perform work:
# poll queues once
HelloWorld.Job.work(read_timeout: 1000, perform_timeout: 5000)
# poll queues forever
HelloWorld.Job.workers(worker_count: 2, read_interval: 1000)
|> Supervisor.start_link(strategy: :one_for_one)
Installation
Put the following into your mix.exs
file's deps
function:
{:jorb, "~> 0.4.0"}
Configuration
In order of priority, configs can be provided by:
Passing options in the
opts
parameter to each functionConfiguring your job module in
config/config.exs
:config :jorb, HelloWorld.Job, [read_timeout: 5000]
Configuring global Jorb settings in
config/config.exs
:config :jorb, write_batch_size: 10
Options:
:backend
- the module implementingJorb.Backend
, defaultJorb.Backend.Memory
. You should set this to something else (likeJorb.Backend.SQS
in production.:reader_count
- number of read workers to launch per job module, defaultSystem.schedulers_online()
.:writer_count
- number of message batch writers to launch, default 1.:write_batch_size
- number of messages to write at once, default 1.:write_interval
- milliseconds to wait before flushing outgoing messages, default 1000.:read_batch_size
- number of messages to read at once, default 1.:read_interval
- milliseconds to sleep between fetching messages, default 1000.:read_duration
- milliseconds to hold connection open when polling for messages, default 1000.:read_timeout
- milliseconds before giving up when reading messages, default 2000.:perform_timeout
- milliseconds before giving up when performing a single job, default 5000.
Installation
If available in Hex, the package can be installed
by adding jorb
to your list of dependencies in mix.exs
:
def deps do
[
{:jorb, "~> 0.3.0"}
]
end
Authorship & License
Jorb is copyright 2018 Appcues, Inc.
Jorb is licensed under the MIT license.
A Jorb Well Done is by The Brothers Chaps.