All Projects → koudelka → Honeydew

koudelka / Honeydew

Licence: mit
Job Queue for Elixir. Clustered or Local. Straight BEAM. Optional Ecto. 💪🍈

Programming Languages

elixir
2628 projects

Projects that are alternatives of or similar to Honeydew

celery.node
Celery task queue client/worker for nodejs
Stars: ✭ 164 (-75.52%)
Mutual labels:  queue, workers, background, job-queue
Qutee
PHP Background Jobs (Tasks) Manager
Stars: ✭ 63 (-90.6%)
Mutual labels:  workers, job-queue, queue
Rq
Simple job queues for Python
Stars: ✭ 8,065 (+1103.73%)
Mutual labels:  workers, job-queue
Workq
Job server in Go
Stars: ✭ 1,546 (+130.75%)
Mutual labels:  workers, queue
theeye-of-sauron
TheEye Dockers and QuickStart
Stars: ✭ 27 (-95.97%)
Mutual labels:  queue, workers
Sidekiq Job Php
Push and schedule jobs to Sidekiq from PHP
Stars: ✭ 34 (-94.93%)
Mutual labels:  workers, queue
Toro
Multithreaded message processing on Postgres
Stars: ✭ 39 (-94.18%)
Mutual labels:  workers, queue
Opq
A simple, in-memory queue with worker pooling and rate limiting in Elixir.
Stars: ✭ 178 (-73.43%)
Mutual labels:  pool, queue
Exq
Job processing library for Elixir - compatible with Resque / Sidekiq
Stars: ✭ 1,218 (+81.79%)
Mutual labels:  job-queue, queue
rqmonitor
Flask based more dynamic and actionable frontend dashboard for monitoring Redis Queue 👩🏿‍💻 http://python-rq.org
Stars: ✭ 152 (-77.31%)
Mutual labels:  workers, job-queue
zmq
ZeroMQ based distributed patterns
Stars: ✭ 27 (-95.97%)
Mutual labels:  queue, workers
Fennel
A task queue library for Python and Redis
Stars: ✭ 24 (-96.42%)
Mutual labels:  background, queue
Redis Smq
A simple high-performance Redis message queue for Node.js.
Stars: ✭ 230 (-65.67%)
Mutual labels:  job-queue, queue
Bull
Premium Queue package for handling distributed jobs and messages in NodeJS.
Stars: ✭ 11,748 (+1653.43%)
Mutual labels:  job-queue, queue
Laravel Job Status
Add ability to track Job progress, status and result dispatched to Queue.
Stars: ✭ 279 (-58.36%)
Mutual labels:  job-queue, queue
Simpleue
PHP queue worker and consumer - Ready for AWS SQS, Redis, Beanstalkd and others.
Stars: ✭ 124 (-81.49%)
Mutual labels:  workers, queue
Resque
Resque is a Redis-backed Ruby library for creating background jobs, placing them on multiple queues, and processing them later.
Stars: ✭ 9,031 (+1247.91%)
Mutual labels:  queue, job-queue
orkid-node
Reliable and modern Redis Streams based task queue for Node.js 🤖
Stars: ✭ 61 (-90.9%)
Mutual labels:  queue, job-queue
yerbie
A blazing fast job queue built for ease of use and scalability
Stars: ✭ 16 (-97.61%)
Mutual labels:  queue, job-queue
Grpool
Lightweight Goroutine pool
Stars: ✭ 616 (-8.06%)
Mutual labels:  pool, workers

Honeydew 💪🏻🍈

Build Status Hex pm

Honeydew ("Honey, do!") is a pluggable job queue and worker pool for Elixir, focused on at-least-once execution.

defmodule MyWorker do
  def do_a_thing do
    IO.puts "doing a thing!"
  end
end

:ok = Honeydew.start_queue(:my_queue)
:ok = Honeydew.start_workers(:my_queue, MyWorker)

:do_a_thing |> Honeydew.async(:my_queue)

# => "doing a thing!"

Isolation

  • Jobs are run in isolated one-time-use processes.
  • Optionally stores immutable state loaned to each worker (a database connection, for example).
  • Initialized Worker

Strong Job Custody

  • Jobs don't leave the queue until either they succeed, are explicitly abandoned or are moved to another queue.
  • Workers are issued only one job at a time, no batching.
  • If a worker crashes while processing a job, the job is reset and a "failure mode" (e.g. abandon, move, retry) is executed. (The default failure mode is to abandon the job.)
  • Job Lifecycle

Clusterable Components

  • Queues, workers and your enqueuing processes can exist anywhere in the BEAM cluster.
  • Global Queues

Plugability

Batteries Included

Easy API

Ecto Queue

The Ecto Queue is designed to painlessly turn your Ecto schema into a queue, using your repo as the backing store.

  • You don't need to explicitly enqueue jobs, that's handled for you (for example, sending a welcome email when a new User is inserted).
  • Eliminates the possibility of your database and work queue becoming out of sync
  • As the database is the queue, you don't need to run a separate queue node.
  • You get all of the high-availability, consistency and distribution semantics of your chosen database.

Check out the included example project, and its README.

Getting Started

In your mix.exs file:

defp deps do
  [{:honeydew, "~> 1.4.6"}]
end

Deployment

If you're using the Mnesia queue (the default), you'll need tell your release system to include the :mnesia application, and you'll have to decide how you're going to create your on-disk schema files, which needs to be done while mnesia is not running.

If you use mnesia outside of Honeydew, you'll want to use the :extra_applications configuration key in your mix.exs file, as well as manually creating your mnesia schema with :mnesia.create_schema(nodes) in an iex session in production:

def application do
  [
    extra_applications: [:mnesia]
  ]
end

Otherwise, if Honeydew is the only user of mnesia, you can let Honeydew manage it by simply using the :included_applications key instead.

def application do
  [
    included_applications: [:mnesia]
  ]
end

tl;dr

  • Check out the examples.
  • Enqueue jobs with Honeydew.async/3, delay jobs by passing delay_secs: <integer>.
  • Receive responses with Honeydew.yield/2.
  • Emit job progress with progress/1
  • Queue/Worker status with Honeydew.status/1
  • Suspend and resume with Honeydew.suspend/1 and Honeydew.resume/1
  • List jobs with Honeydew.filter/2
  • Move jobs with Honeydew.move/2
  • Cancel jobs with Honeydew.cancel/2

README

The rest of the README is broken out into slightly more digestible sections.

Also, check out the README files included with each of the examples.

CHANGELOG

It's worth keeping abreast with the CHANGELOG

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].