ex_celery

Build Status

ex_celery is a Celery task producer for Elixir. It currently only supports delaying tasks, not retrieving their result. Here's an example of its use:

Installation

First, add ex_celery to your mix.exs dependencies:

def deps do
[{:ex_celery, "~> 0.1.2"}]
end

Then, update your dependencies:

$ mix deps.get

Usage

iex> {:ok, pid} = ExCelery.start_link([broker_url: "amqp://guest:guest@localhost"])
{:ok, #PID<0.149.0>}
iex> {:ok, task_id} = ExCelery.apply_async(pid, "my_app.tasks.add", [
...> args: [1, 2],
...> ])
{:ok, "f59b0d20-3f2c-46c7-9f01-c787b488e96c"}
iex> {: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.

You may also specify an exchange other than the default (celery):

iex> {:ok, pid} = ExCelery.start_link([
...> broker_url: "amqp://username:password@rabbitmq.host/vhost",
...> exchange: "custom_exchange",
...> ])
{:ok, #PID<0.149.0>}

Note: Celery messages will be encoded in JSON format. You must ensure that json is listed in CELERY_ACCEPT_CONTENT.

### Task options

iex> {: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).