README.md

# Faktory Worker Ex

Elixir worker for Faktory ([blog](http://www.mikeperham.com/2017/10/24/introducing-faktory/)) ([github](https://github.com/contribsys/faktory)).

## Installation

The package can be installed by adding `faktory_worker_ex` to your list of dependencies in `mix.exs`:
```elixir
def deps do
  [
    {:faktory_worker_ex, "~> 0.0"}
  ]
end
```

## Quickstart

```elixir
# For enqueuing jobs
defmodule MyFaktoryClient do
  use Faktory.Client, otp_app: :my_cool_app
end

# For processing jobs
defmodule MyFaktoryWorker do
  use Faktory.Worker, otp_app: :my_cool_app
end

# You must add them to your app's supervision tree
defmodule MyCoolApp.Application do
  use Application

  def start(_type, _args) do
    children = [MyFaktoryClient, MyFaktoryWorker]
    Supervisor.start_link(children, strategy: :one_for_one)
  end
end

defmodule MyGreeterJob do
  use Faktory.Job

  def perform(greeting, name) do
    IO.puts("#{greeting}, #{name}!!")
  end
end

# List argument must match the arity of MyGreeterJob.perform
MyGreeterJob.perform_async(["Hello", "Genevieve"])
```

## Starting the worker

`mix faktory`

You should see logging output and the above job being processed.

`mix faktory -h`

To see command line options that can override in-app configuration.

`iex -S mix faktory`

If you want to debug your jobs using `IEx.pry`.

## Configuration

Compile-time config is done with `Mix.Config`.

Run-time config is done with environment variables and/or an `init/1` callback.

See documentation on:
* [Client](https://hexdocs.pm/faktory_worker_ex/Faktory.Client.html)
* [Worker](https://hexdocs.pm/faktory_worker_ex/Faktory.Worker.html)

## Running a Faktory server

To run this readme's example, you need to run a Faktory server.

Easiest way is with Docker:
```
docker run --rm -p 7419:7419 -p 7420:7420 contribsys/faktory:latest -b :7419 -w :7420
```

You should be able to go to [http://localhost:7420](http://localhost:7420) and see the web ui.

## Features

* Middleware
* Connection pooling (for clients)
* Support for multiple Faktory servers
* Faktory server authentication and TLS support
* Comprehensive documentation
* Comprehensive supervision tree
* Decent integration tests

## Missing features

* Responding to `quiet` and `terminate`
* Running without `mix` (e.g. a Distillery release)

## Issues / Questions

[https://github.com/cjbottaro/faktory_worker_ex/issues](https://github.com/cjbottaro/faktory_worker_ex/issues)