View Source FaktoryWorker.Job (faktory_worker v1.9.7)
The FaktoryWorker.Job
module is used to perform jobs in the background by sending to and fetching from Faktory.
To build a worker you must use
the job module within a module in your application.
defmodule MyApp.SomeWorker do
use FaktoryWorker.Job
end
This will bring in all of the functionality required to perform jobs via Faktory. The MyApp.SomeWorker
will now
have a perform_async/2
function available for sending jobs to Faktory. Before this function can be called, a
perform
function must be defined. This function must accept the same number of arguments that are
being sent to Faktory via the perform_async/2
function.
defmodule MyApp.SomeWorker do
use FaktoryWorker.Job
def perform(job_arg) do
do_some_work(job_arg)
end
end
With this in place it is now possible to send work to Faktory and the MyApp.SomeWorker
will fetch the job and call
the perform/1
function with the same job arguments that we sent.
> MyApp.SomeWorker.perform_async("job arg")
:ok
It is also possible to send multiple arguments for a single job by passing in a list of values to the perform_async/2
function.
> MyApp.SomeWorker.perform_async(["job arg1", "job arg2"])
:ok
In order for the job to be performed correctly, a perform/2
function needs to be defined within the MyApp.SomeWorker
module.
defmodule MyApp.SomeWorker do
use FaktoryWorker.Job
def perform(job_arg1, job_arg2) do
do_some_work(job_arg1, job_arg2)
end
end
When defining perform
functions, they must always accept one argument for each item in the list of values passed into
perform_async/2
.
Synchronous job pushing
Previous version used Broadway to send jobs and :skip_pipeline
parameter was used to do it synchronously.
:skip_pipeline
is not supported anymore.
Since Batch operations is a feature of Faktory Enterprise this library now sends any single job synchronously
and makes HTTP call to faktory server (see FaktoryWorker.Batch
).
Worker Configuration
A list of options can be specified when using the the FaktoryWorker.Job
module. These options will be used when sending
jobs to faktory and will apply to all jobs sent with the perform_async/2
function.
For a full list of configuration options see the Worker Configuration documentation.
Overriding Worker Configuration
The perform_async/2
function accepts a keyword list as its second argument. This list has the same options
available that the FaktoryWorker.Job
module accepts. Any options passed into this function override the options
that have been set on the worker module.
For a full list of configuration options see the Worker Configuration documentation.
Data Serialization
Faktory expects all values to be serialized in JSON format. FaktoryWorker uses Jason
for serialization. This
means only values that implement the Jason.Encoder
protocol are valid when calling the perform_async/2
function.