Configuration
AMQP connection
Roger depends on RabbitMQ as its backing store. The minimum configuration is below:
config :roger,
amqp: [
host: "localhost",
port: 5672
]
These options are directly forwarded to the AMQP connection. The most common options are:
:username
- The name of a user registered with the broker (defaults to “guest”);:password
- The password of user (defaults to “guest”);:virtual_host
- The name of a virtual host in the broker (defaults to “/“);:host
- The hostname of the broker (defaults to “localhost”);:port
- The port the broker is listening on (defaults to5672
);:channel_max
- The channel_max handshake parameter (defaults to0
);:frame_max
- The frame_max handshake parameter (defaults to0
);:heartbeat
- The hearbeat interval in seconds (defaults to0
- turned off);:connection_timeout
- The connection timeout in milliseconds (defaults toinfinity
);:ssl_options
- Enable SSL by setting the location to cert files (defaults tonone
);:client_properties
- A list of extra client properties to be sent to the server, defaults to[]
;
Worker callbacks
Roger can be configured with a callback module which invoke functions on various places in a job’s life cycle.
config :roger,
callbacks: MyWorkerModule
In this scenario, MyWorkerModule
needs to use Roger.Worker.Callback
:
defmodule MyWorkerModule do
use Roger.Partition.Worker.Callback
def after_run(_app_id, job, result, _state) do
IO.puts("Job #{job.id} succeeded with: #{inspect result}")
end
end
In this worker module, you can implement the functions before_run/2
,
after_run/4
, on_error/4
, on_cancel/2
and on_buried/4
to
respond to job events.
See Roger.Partition.Worker.Callback
for the full documentation on
these functions.
State persistence callbacks
Each Roger partition has one global process running in the cluster,
which holds some information necessary to implement certain features
(see Roger.Partition.Global
for details).
It provides hooks to persist the information between partition / node restarts. By default, the global state is loaded from and written to the filesystem, but it is possible to override the persister, like this:
config :roger,
persister: Your.PersisterModule
The persister module must implement the
Roger.Partition.Global.StatePersister
behaviour, which provides
simple load and save functions.