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

Job Queue Laravel Package

enqueue/job-queue

Enqueue Job Queue is a transport-agnostic PHP job queue component that adds higher-level features like unique jobs, sub-jobs, dependent jobs, and more. Built on top of Enqueue transports; includes docs, community support, and MIT license.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture Fit

  • Laravel Compatibility: The package is designed for PHP and integrates with the Enqueue ecosystem, which supports multiple transports (Redis, RabbitMQ, Doctrine, etc.). Laravel’s built-in queue system (based on Symfony’s Messenger) is compatible with Enqueue’s transports, making this a strong fit for extending Laravel’s job queue capabilities.
  • Use Case Alignment: Ideal for:
    • Complex job workflows (sub-jobs, dependent jobs, unique jobs).
    • Distributed task processing (e.g., background processing, cron-like jobs, or event-driven workflows).
    • Replacement/augmentation of Laravel’s default queue system for advanced features.
  • Laravel-Specific Gaps: While Laravel’s queue system is robust, this package fills gaps in:
    • Job dependencies (e.g., chaining jobs with after()/before() logic).
    • Unique job enforcement (preventing duplicate execution).
    • Sub-jobs (parallelizing smaller tasks within a parent job).

Integration Feasibility

  • Transport Agnosticism: Enqueue supports multiple backends (Redis, RabbitMQ, etc.), which aligns with Laravel’s queue drivers. The package can be layered on top of existing Laravel queue configurations.
  • Symfony Messenger Bridge: Enqueue is built for Symfony Messenger, but Laravel’s queue system is a subset of Messenger. The package can be adapted via:
    • Custom Queue Workers: Extend Laravel’s Illuminate\Queue\Worker to use Enqueue’s job processing.
    • Middleware Integration: Use Enqueue’s middleware (e.g., retry, timeout) alongside Laravel’s queue middleware.
  • Database vs. Message Broker: If using Doctrine transport (database-backed), it may conflict with Laravel’s queue table schema. Requires careful migration planning.

Technical Risk

  • Learning Curve: Enqueue’s API differs from Laravel’s queue system. Developers must learn:
    • Job serialization/deserialization (Enqueue uses Symfony’s Message interface).
    • Transport-specific configurations (e.g., Redis vs. RabbitMQ).
  • Dependency Bloat: Adding Enqueue introduces new dependencies (e.g., enqueue/redis, enqueue/doctrine). May require Docker/container adjustments for production.
  • Laravel-Specific Quirks:
    • Job Serialization: Laravel jobs must implement ShouldQueue and be serializable. Enqueue jobs require MessageInterface. May need wrapper classes.
    • Event System: Laravel’s events/queues are tightly coupled. Enqueue’s event system (e.g., JobProcessed) may require custom event listeners.
  • Performance Overhead: Enqueue’s additional features (e.g., job dependencies) add complexity. Benchmark against Laravel’s native queue for throughput.

Key Questions

  1. Why Enqueue Over Laravel’s Queue?
    • Are we using advanced features (sub-jobs, dependencies) not natively supported?
    • Do we need multi-transport flexibility (e.g., fallback from Redis to RabbitMQ)?
  2. Transport Choice:
    • Which backend (Redis, RabbitMQ, Doctrine) aligns with our infrastructure?
    • How will we handle transport-specific failures (e.g., Redis connection drops)?
  3. Migration Strategy:
    • Will we replace Laravel’s queue entirely or use Enqueue alongside it?
    • How will we handle existing queued jobs during migration?
  4. Monitoring and Observability:
    • Does Enqueue integrate with Laravel’s Horizon or require a new monitoring stack?
    • How will we track job failures/retries across transports?
  5. Team Skills:
    • Does the team have experience with Enqueue/Symfony Messenger?
    • Will training be required for developers?

Integration Approach

Stack Fit

  • Laravel Ecosystem:
    • Queue Workers: Replace or extend php artisan queue:work with Enqueue’s workers (e.g., enqueue:consume).
    • Job Classes: Laravel jobs can be wrapped in Enqueue’s JobInterface or converted to Enqueue’s Message format.
    • Service Providers: Register Enqueue’s transports and connections in Laravel’s config/queue.php or a custom provider.
  • Transport Layer:
    • Redis/RabbitMQ: Leverage existing Laravel queue drivers by configuring Enqueue to use the same connection.
    • Doctrine (Database): Requires schema adjustments (e.g., adding Enqueue’s job tables) and may conflict with Laravel’s jobs table.
  • Symfony Messenger Bridge:
    • Use symfony/messenger as a bridge to integrate Enqueue with Laravel’s queue system. Example:
      // config/queue.php
      'connections' => [
          'enqueue' => [
              'driver' => 'enqueue',
              'dsn' => env('ENQUEUE_DSN', 'redis://localhost'),
              'options' => [
                  'transport' => EnqueueRedis::class,
              ],
          ],
      ],
      

Migration Path

  1. Phase 1: Pilot Integration
    • Step 1: Add Enqueue to composer.json and configure a single transport (e.g., Redis).
    • Step 2: Create a wrapper for Laravel jobs to implement Enqueue\Job\JobInterface.
    • Step 3: Test with a non-critical job queue (e.g., sending emails).
    • Step 4: Compare performance/monitoring with Laravel’s native queue.
  2. Phase 2: Full Adoption
    • Step 1: Migrate critical jobs to Enqueue, starting with those needing dependencies/sub-jobs.
    • Step 2: Update queue workers to use Enqueue’s consumers.
    • Step 3: Deprecate Laravel’s native queue for new jobs (keep for legacy).
    • Step 4: Monitor for transport-specific issues (e.g., RabbitMQ vs. Redis behavior).
  3. Phase 3: Advanced Features
    • Implement Enqueue’s unique jobs, delayed jobs, or priority queues.
    • Integrate with Laravel’s events for job lifecycle hooks (e.g., JobProcessed).

Compatibility

  • Laravel Versions: Tested with Laravel 8+ (Symfony 5+ compatibility). May require adjustments for older versions.
  • PHP Version: Requires PHP 8.0+. Laravel 9+ aligns well.
  • Existing Jobs: Jobs using Laravel’s ShouldQueue can be adapted with minimal changes:
    use Enqueue\Job\JobInterface;
    
    class MyJob implements ShouldQueue, JobInterface {
        public function handle() { ... }
        // Implement Enqueue's serialize/deserialize methods.
    }
    
  • Third-Party Packages: Check for conflicts with other queue-related packages (e.g., spatie/queue-scheduler).

Sequencing

  1. Infrastructure Setup:
    • Configure the chosen transport (e.g., Redis cluster, RabbitMQ).
    • Ensure Laravel’s queue connection points to Enqueue’s transport.
  2. Code Changes:
    • Update job classes to implement JobInterface or wrap them.
    • Modify queue workers to use Enqueue’s consumers.
  3. Testing:
    • Unit test job serialization/deserialization.
    • Integration test with a staging environment mirroring production.
  4. Deployment:
    • Roll out in stages (e.g., canary release for a subset of jobs).
    • Monitor for transport-specific failures (e.g., Redis lag).

Operational Impact

Maintenance

  • Dependency Management:
    • Enqueue and its transports (e.g., enqueue/redis) require updates. Use composer normalize to manage version constraints.
    • Monitor for breaking changes in Enqueue’s API or transport libraries.
  • Configuration Drift:
    • Transport-specific configurations (e.g., Redis TTL, RabbitMQ prefetch) may diverge across environments. Use Laravel’s environment variables or Enqueue’s config files.
  • Logging and Debugging:
    • Enqueue provides its own logging (e.g., job processing events). Integrate with Laravel’s logging system via monolog handlers.
    • Example:
      // config/logging.php
      'channels' => [
          'enqueue' => [
              'driver' => 'single',
              'path' => storage_path('logs/enqueue.log'),
              'level' => 'debug',
          ],
      ],
      

Support

  • Troubleshooting:
    • Debugging may require familiarity with both Laravel’s queue system and Enqueue’s internals. Document common issues (e.g., job timeouts, transport failures).
    • Use Enqueue’s CLI tools (enqueue:consume --debug) alongside Laravel’s queue:failed-table.
  • Community Resources:
    • Limited Laravel-specific support. Rely on:
      • Enqueue Gitter for general questions.
      • Forma-Pro’s commercial support for critical issues.
  • Error Handling:
    • Implement custom retry logic for transport failures (e.g., exponential backoff for Redis timeouts).
    • Use Enqueue’s JobFailed events to trigger Laravel notifications.

Scaling

  • Horizontal Scaling:
    • Enqueue supports distributed workers out of the box. Scale by adding more queue consumers (e.g., `enqueue:consume --concurrency=
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.
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
spatie/mailcoach-vapor