README.md

# ex_celery

[![Build Status](https://travis-ci.org/robgolding/ex_celery.svg?branch=develop)](https://travis-ci.org/robgolding/ex_celery)


A [Celery](http://www.celeryproject.org/) task producer for Elixir. Currently
only supports delaying tasks, not retrieving their result.

## Installation

First, add `ex_celery` to your `mix.exs` dependencies:

```elixir
def deps do
  [{:ex_celery, "~> 0.2.0"}]
end
```

Then, update your dependencies:

```
$ mix deps.get
```

## Usage

Add `ex_celery` to your applications list:

```elixir
def application do
  [applications: [:ex_celery]]
end
```

Add configuration parameters for `ex_celery` using `Mix.Config`:

```elixir
use Mix.Config

config :ex_celery,
       broker_url: "amqp://username:password@host/vhost",
       exchange: "custom_exchange"
```

### Delaying tasks

```elixir
{:ok, task_id} = ExCelery.apply_async(pid, "my_app.tasks.add", [
    args: [1, 2],
])
{:ok, "f59b0d20-3f2c-46c7-9f01-c787b488e96c"}
{:ok, task_id} = ExCelery.apply_async(pid, "my_app.tasks.high_priority_task", [
    routing_key: "priority.high",
})
{:ok, "7f9ebbe2-a146-11e6-8328-3c15c2e06802"}
```

### Broker support

RabbitMQ is the only broker currently supported. The `broker_url` is expected
to be in the [AMQP URI format](https://www.rabbitmq.com/uri-spec.html).

_Note: Celery messages will be encoded in JSON format. You must ensure that
`json` is listed in [`CELERY_ACCEPT_CONTENT`](http://docs.celeryproject.org/en/latest/configuration.html#celery-accept-content)._

### Task options

```elixir
{:ok, task_id} = ExCelery.apply_async(pid, "my_app.tasks.shorten_url", [
    args: ["http://elixir-lang.org/"],
    kwargs: %{allow_duplicates: true},
    routing_key: "tasks.misc",
])
```

## Licence

`ex_celery` is released under the MIT license (see `LICENSE`).