Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Jobboy Driver Redis Laravel Package

dansan/jobboy-driver-redis

Redis driver for JobBoy, providing a Redis-backed process repository for storing and managing JobBoy processes. Use it to run JobBoy with Redis persistence and fast access. Full docs: jobboy-doc processrepository on Redis.

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation

    composer require dansan/jobboy-driver-redis
    

    Ensure dansan/jobboy is also installed (this driver extends JobBoy).

  2. Configuration Add Redis connection details to your .env:

    JOBBOY_REDIS_CONNECTION=redis
    JOBBOY_REDIS_PREFIX=jobboy_
    

    Ensure your config/jobboy.php includes:

    'driver' => 'redis',
    
  3. First Use Case Dispatch a job via Redis:

    use Dansan\JobBoy\JobBoy;
    use Dansan\JobBoy\Job;
    
    $job = new Job('send-email', ['user_id' => 1]);
    JobBoy::dispatch($job);
    

    Verify jobs are queued in Redis using:

    redis-cli LRANGE jobboy_queue:send-email 0 -1
    

Implementation Patterns

Core Workflows

  1. Job Dispatching

    • Use JobBoy::dispatch() for synchronous enqueueing.
    • Leverage JobBoy::dispatchLater() for delayed jobs:
      JobBoy::dispatchLater($job, now()->addMinutes(5));
      
    • Batch dispatch with JobBoy::dispatchBatch() for bulk operations.
  2. Job Processing

    • Create a worker script (artisan jobboy:work) to process jobs:
      php artisan jobboy:work --queue=send-email --daemon
      
    • Use --limit=N to control job batch size (e.g., --limit=10).
  3. Job Retries

    • Configure retry logic in config/jobboy.php:
      'redis' => [
          'retry_after' => 60, // seconds
          'max_retries' => 3,
      ],
      
    • Failed jobs auto-retry; log failures to jobboy_failed:{job_name}.
  4. Monitoring

    • Track job stats via Redis keys:
      • jobboy:stats:{queue}: Job counts (pending, failed, processed).
      • jobboy:delayed:{job_name}: Scheduled jobs.
    • Use JobBoy::stats() in code:
      $stats = JobBoy::stats('send-email');
      

Integration Tips

  • Laravel Queues: Mimic Laravel’s queue system by extending JobBoy with custom middleware:
    JobBoy::addMiddleware(\App\Jobs\LogJob::class);
    
  • Event Listeners: Trigger events on job lifecycle (e.g., JobStarted, JobFailed):
    event(new JobStarted($job));
    
  • Testing: Mock Redis in tests using Mockery or Laravel’s RedisFake:
    $this->app->singleton(Redis::class, function () {
        return new RedisFake();
    });
    

Gotchas and Tips

Pitfalls

  1. Connection Issues

    • Ensure Redis is running and accessible. Test with:
      redis-cli PING
      
    • Handle connection drops gracefully by wrapping JobBoy calls in try-catch:
      try {
          JobBoy::dispatch($job);
      } catch (\RedisException $e) {
          Log::error("Redis connection failed: " . $e->getMessage());
          // Fallback to database driver or retry logic
      }
      
  2. Key Naming Collisions

    • Default prefix (jobboy_) may conflict with other Redis keys. Customize in .env:
      JOBBOY_REDIS_PREFIX=myapp_jobboy_
      
    • Avoid special characters in job names (e.g., :, $, \).
  3. Memory Management

    • Redis lists (jobboy_queue:{name}) grow indefinitely. Implement TTL for delayed jobs:
      JobBoy::dispatchLater($job, now()->addHours(1), 3600); // TTL in seconds
      
    • Monitor memory usage with:
      redis-cli INFO memory
      
  4. Daemon Stability

    • Use --daemon cautiously; crashes may leave jobs stuck. Run workers in a PM2/Supervisor process:
      supervisorctl start jobboy-worker
      

Debugging Tips

  • Inspect Queues List all jobs in a queue:

    redis-cli LRANGE jobboy_queue:send-email 0 -1
    

    View delayed jobs:

    redis-cli ZRANGE jobboy_delayed:send-email 0 -1 WITHSCORES
    
  • Log Failed Jobs Check failed jobs:

    redis-cli LRANGE jobboy_failed:send-email 0 -1
    

    Decode payloads with:

    redis-cli GET jobboy_failed:send-email:123 | php -r 'echo json_decode($argn, true);'
    
  • Enable Debug Mode Set JOBBOY_DEBUG=true in .env to log job lifecycle events to storage/logs/jobboy.log.

Extension Points

  1. Custom Job Serialization Override serialization in a service provider:

    JobBoy::extend('redis', function ($app) {
        return new CustomRedisDriver($app['redis'], [
            'serializer' => new \App\Jobs\JsonApiSerializer(),
        ]);
    });
    
  2. Queue Prioritization Use Redis sorted sets for priority queues:

    JobBoy::dispatchPrioritized($job, 1); // Lower score = higher priority
    
  3. Webhooks for Job Events Extend the driver to emit webhook notifications:

    JobBoy::on('job.processed', function ($job) {
        Http::post('https://your-webhook.com/jobs', ['job' => $job]);
    });
    
  4. Horizontal Scaling Use Redis Cluster for multi-node setups. Configure in config/jobboy.php:

    'redis' => [
        'cluster' => true,
        'options' => [
            'cluster' => 'redis',
            'parameters' => [
                'cluster' => 'default',
                'alias' => [
                    'redis' => [
                        'host' => ['redis1', 'redis2'],
                        'port' => 6379,
                    ],
                ],
            ],
        ],
    ],
    
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
terminal42/code-quality-tools
codifyo/ts-generator-bundle
andydefer/laravel-cluster
testo/fiber
mintobit/jobqueue
a4sex/maintenance-bundle
a4sex/entity-date-update
a4sex/client-identifier
a4sex/base-utilites
a4sex/key-value-storage
a4sex/micro-status
chilldev/dependency-injection-extra
datinglibre/datinglibre-app-api
biberltd/corebundle
bricre/symfony-bundle-test
biberltd/logbundle
dominium/http-adapter-bundle
dominium/google-analytics
a4sex/auto-clean-entity
christhompsontldr/laravel-inky