Packages

Elixir worker for Faktory (successor of Sidekiq); async/background queue processing

Current section

Files

Jump to
faktory_worker_ex lib faktory consumer.ex
Raw

lib/faktory/consumer.ex

defmodule Faktory.Consumer do
@moduledoc false
def start_link(config) do
Task.start_link(__MODULE__, :run, [config])
end
def run(config) do
Process.flag(:trap_exit, true) # The secret sauce.
job_queue = Faktory.Registry.name(config.module, :job_queue)
report_queue = Faktory.Registry.name(config.module, :report_queue)
Stream.repeatedly(fn -> BlockingQueue.pop(job_queue) end)
|> Enum.each(&process(&1, config, report_queue))
end
def process(job, config, report_queue) do
%Faktory.JobTask{
job: job,
config: config,
report_queue: report_queue
} |> Faktory.JobTask.run
end
end