0.3.0 • Published 4 months ago

caron v0.3.0

Weekly downloads
3
License
MIT
Repository
github
Last release
4 months ago

caron

Atomic Job enqueuer from Redis lists to popular Job Queues (Sidekiq, Bull, ...)

Caron pops messages from a redis list and atomically creates a Job for the specified Job Queue.

Uses lua scripting internally to provide atomicity (http://redis.io/commands/EVAL)

Support

Install

npm install -g caron

Usage

$ caron --help

  Usage: caron [options]

  Options:

    -h, --help            output usage information
    -V, --version         output the version number
    -t, --type <val>      queue type [sidekiq | bull]
    -l, --list <val>      source redis list (i.e: global_jobs)
    -r, --redis <val>     redis url (i.e: redis://127.0.0.1:6379)
    -f, --freq <n>        poll frequency (in milliseconds) - default: 10
    -b, --batch <n>       max number of jobs created per batch - default: 1000
    --q_prefix <val>      redis queue prefix (i.e: "bull")
    --def_queue <val>     default dest queue - default: default
    --def_worker <val>    default Job Queue worker - default: BaseJob
    --def_attempts <val>  default Bull Job attempts - default: 1
    --q_lifo              Bull LIFO mode
caron --type sidekiq --list sidekiq_jobs --redis "redis://127.0.0.1:6379" --freq 25

Debug mode:

DEBUG=caron:* caron -t bull -l bull_test

Examples

Push from redis-cli
// Sidekiq job enqueue
redis-cli > lpush "sidekiq_jobs" "{\"$queue\":\"critical\",\"$class\":\"BackendJob\",\"foo\":\"bar\",\"my\":\"stuff\",\"other\":\"stuff\",\"other\":{\"f\":5}}"

// Bull job enqueue
redis-cli > lpush "bull_jobs" "{\"$queue\":\"critical\",\"$attempts\":4,\"$backoff\":{\"type\":\"exponential\",\"delay\":5000}, \"foo\":\"bar\",\"my\":\"stuff\",\"other\":{\"f\":5}}"
Push from Node.js
'use strict'

const Redis = require('ioredis')

var redis = new Redis()

redis.lpush('sidekiq_test', JSON.stringify({ foo: 'bar', '$queue': 'critical', '$class': 'MyCriticalJob', other: { a: 1, b: 2 } }))
redis.lpush('bull_test', JSON.stringify({ foo: 'bar', '$queue': 'priority', '$attempts': 5, '$backoff': { type: 'exponential', delay: 5000 }, other: { a: 1, b: 2 } }))
redis.lpush('bull_test', JSON.stringify({ foo: 'bar', '$queue': 'lazy', '$attempts': 1, '$delay': 5000, other: { a: 1, b: 2 } }))
Push from Ruby
require 'redis'
require 'json'

rcli = Redis.new

rcli.lpush('sidekiq_test', JSON.dump({ 'foo' => 'bar', '$queue' => 'critical', '$class' => 'MyCriticalJob', 'other' => { 'a' => 1, 'b' => 2 } }))
rcli.lpush('bull_test', JSON.dump({ 'foo' => 'bar', '$queue' => 'priority', '$attempts' => 5, '$backoff' => { 'type' => exponential', 'delay' => 5000 }, 'other' => { 'a' => 1, 'b' => 2 } }))
rcli.lpush('bull_test', JSON.dump({ 'foo' => 'bar', '$queue' => 'lazy', '$attempts' => 1, '$delay' => 5000, other => { 'a' => 1, 'b' => 2 } }))
rcli.lpush('bull_test', JSON.dump({ 'foo' => 'bar', '$queue' => 'lazy', '$attempts' => 1, '$delay' => 5000, other => { 'a' => 1, 'b' => 2 } }))
0.3.0

4 months ago

0.2.4

8 months ago

0.1.2

7 years ago

0.1.1

7 years ago

0.1.0

7 years ago

0.0.32

7 years ago

0.0.31

7 years ago

0.0.30

7 years ago

0.0.28

7 years ago

0.0.27

7 years ago

0.0.26

7 years ago

0.0.25

7 years ago

0.0.24

7 years ago

0.0.23

8 years ago

0.0.22

8 years ago

0.0.20

8 years ago

0.0.19

8 years ago

0.0.18

8 years ago

0.0.17

8 years ago

0.0.16

8 years ago

0.0.15

8 years ago

0.0.14

8 years ago

0.0.13

8 years ago

0.0.12

8 years ago

0.0.11

8 years ago

0.0.10

8 years ago

0.0.9

8 years ago

0.0.8

8 years ago

0.0.7

8 years ago

0.0.6

8 years ago

0.0.5

8 years ago

0.0.4

8 years ago

0.0.3

8 years ago

0.0.2

8 years ago

0.0.1

8 years ago