ex_celery
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).