Skip to content

Jobs Plugin

Background job processing with in-memory or Redis-backed queues.

Features

  • In-memory and Redis drivers
  • Multiple named queues with independent concurrency
  • Retry with exponential backoff
  • RPC: jobs.push (add job), jobs.stats (queue depth)
  • Graceful shutdown — in-flight jobs complete before exit

Planned

  • Configurable retry delay and backoff strategy
  • Job execution timeout
  • Dead letter queue for failed jobs
  • Delayed jobs (scheduled for future)
  • Priority queues
  • Unified driver config (host/port/user/password/db)
  • Additional drivers (SQS, AMQP, NATS)

Configuration

[jobs]
driver = "memory"                          # "memory" or "redis"
redis_url = "redis://127.0.0.1:6379"       # Redis URL (when driver = "redis")

[[jobs.queues]]
name = "default"
concurrency = 4        # Concurrent workers for this queue
max_retries = 3        # Max retry attempts

[[jobs.queues]]
name = "priority"
concurrency = 8
max_retries = 5

Drivers

Driver Persistence Use case
memory No — lost on restart Development, testing
redis Yes Production

PHP Usage

Dispatch a job:

folk_call('jobs.dispatch', json_encode([
    'queue' => 'default',
    'handler' => 'App\\Jobs\\SendEmail',
    'payload' => ['to' => 'user@example.com'],
]));

With Laravel, use the standard dispatch() helper — the Folk service provider routes jobs through the jobs plugin automatically.