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

Redis Messenger Laravel Package

symfony/redis-messenger

Redis transport integration for Symfony Messenger, enabling queueing and async message handling backed by Redis. Part of the Symfony ecosystem, with links to contributing, issue reporting, and pull requests in the main Symfony repository.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture Fit

  • Symfony Messenger Alignment: The package is a first-class citizen in the Symfony Messenger ecosystem, designed to integrate seamlessly with Laravel via Symfony’s components (e.g., symfony/messenger, symfony/redis). This alignment reduces friction for teams already using Symfony components in Laravel (e.g., HTTP Client, UX, or Messenger).
  • Redis-Centric Design: Leverages Redis’s pub/sub, streams, and key-value capabilities for low-latency, high-throughput messaging. Ideal for CPU-bound (e.g., data processing) or I/O-bound (e.g., API calls) tasks where Redis’s in-memory performance excels.
  • Event-Driven Patterns: Supports asynchronous workflows, fanout, request-reply, and saga patterns—critical for microservices, real-time systems, or hybrid cloud architectures.
  • Laravel Compatibility: While not natively Laravel-aware, it can be wrapped in a Laravel Queue adapter (e.g., RedisQueue) or used alongside Laravel’s native queues for hybrid workflows.

Integration Feasibility

  • Symfony Messenger Bridge: Requires Symfony Messenger (symfony/messenger) as a dependency, which may necessitate a partial Symfony adoption in Laravel. However, the bridge is lightweight and focused on Redis transport.
  • Redis Dependency: Assumes Redis is already in the stack (e.g., for caching). If not, adds infrastructure complexity (e.g., provisioning, scaling, backups).
  • Laravel Queue Adapter: Can be shimmed into Laravel’s Illuminate\Queue\Queue interface for drop-in replacement of database or redis queues. Example:
    // app/Providers/AppServiceProvider.php
    Queue::extend('symfony_redis', function ($app) {
        return new SymfonyRedisQueue(
            $app->make('symfony.messenger.transport.redis')
        );
    });
    
  • Message Serialization: Symfony Messenger uses native PHP serialization or Message objects, which may require adaptation for Laravel’s Queueable jobs (e.g., converting Illuminate\Bus\Queueable to Symfony Message interface).

Technical Risk

  • Redis Reliability: Redis is ephemeral—messages are lost on restart unless persisted (RDB/AOF). Mitigate with:
    • Retry policies (Symfony’s built-in backoff).
    • Dead-letter queues (DLQ) for failed messages.
    • Backup strategies (e.g., Redis replication, cloud snapshots).
  • Symfony Learning Curve: Non-Symfony teams may face adoption friction (e.g., Messenger’s Transport/Handler concepts). Mitigate with:
    • Abstraction layers (e.g., Laravel-specific wrappers).
    • Documentation mapping Laravel queues to Symfony Messenger.
  • Performance Trade-offs:
    • Throughput: Redis queues outperform database queues but may lag behind dedicated brokers (e.g., RabbitMQ, Kafka) for persistent or multi-language workloads.
    • Latency: Sub-millisecond for in-memory ops, but network-bound if Redis is remote.
  • Laravel-Specific Gaps:
    • Job Events: Laravel’s job:failed, job:released events won’t work out-of-the-box. Requires custom event listeners.
    • Queue Workers: Symfony’s messenger:consume CLI differs from Laravel’s queue:work. May need wrapper scripts or custom processes.
    • Horizon Integration: Laravel Horizon (for monitoring) won’t work without custom adapters.

Key Questions

  1. Redis Infrastructure:
    • Is Redis already in use? If not, what are the costs (licensing, cloud, ops)?
    • Are high availability (Sentinel/Cluster) and persistence (RDB/AOF) configured?
  2. Symfony Adoption:
    • Is the team open to partial Symfony adoption (Messenger)?
    • Are there existing Symfony components (e.g., HTTP Client) that could reduce friction?
  3. Laravel Integration:
    • Should we fully replace Laravel queues or use a hybrid approach (e.g., Symfony for CPU-bound tasks, Laravel for I/O-bound)?
    • How will we handle job serialization (e.g., Queueable vs. Message)?
  4. Operational Impact:
    • Who will monitor Redis queues (e.g., message backlog, failures)?
    • How will we scale workers (e.g., Kubernetes, EC2 Auto Scaling)?
  5. Failure Modes:
    • What’s the recovery strategy for Redis failures (e.g., failover, retries)?
    • How will we debug stuck messages or deadlocks?

Integration Approach

Stack Fit

  • Core Stack:
    • Laravel (v8.0+) with Symfony Messenger (symfony/messenger:^6.4).
    • Redis (v6.2+) with PHP Redis extension (ext-redis).
    • Optional: Symfony components (e.g., symfony/redis, symfony/options-resolver) for advanced configs.
  • Alternatives:
    • If avoiding Symfony, consider Laravel’s native Redis queue (redis driver) or third-party adapters (e.g., predis/predis).
    • For persistent queues, evaluate database queues (queue:table) or RabbitMQ (php-amqplib).
  • Tooling:
    • Monitoring: Prometheus + Grafana for queue metrics (e.g., symfony_messenger_messages_sent_total).
    • CLI: Symfony’s messenger:consume for workers (replace Laravel’s queue:work).
    • IDE: PHPStorm/VSCode with Symfony Messenger plugins for autocompletion of message classes.

Migration Path

  1. Phase 1: Spike (1-2 weeks)
    • Benchmark Symfony Redis Messenger vs. Laravel’s database queue for a high-volume endpoint (e.g., order processing).
    • Compare throughput, latency, and resource usage (CPU, memory, Redis load).
    • Example benchmark script:
      // benchmark.php
      $messages = range(1, 1000);
      $start = microtime(true);
      foreach ($messages as $msg) {
          $this->messenger->dispatch(new ProcessOrder($msg));
      }
      $dispatchTime = microtime(true) - $start;
      
      // Consume in background
      $this->messenger->consume();
      
  2. Phase 2: Pilot (2-4 weeks)
    • Migrate a non-critical workflow (e.g., low-priority notifications).
    • Create a Laravel Queue adapter for Symfony Messenger:
      // app/Queue/SymfonyRedisQueue.php
      class SymfonyRedisQueue implements QueueInterface {
          public function __construct(private TransportInterface $transport) {}
          public function push($job, $data, $delay = 0) {
              $this->transport->send(new SymfonyMessage($data));
          }
          // Implement other QueueInterface methods...
      }
      
    • Test job serialization, retries, and failures.
  3. Phase 3: Rollout (4-8 weeks)
    • Replace Laravel’s queue:work with Symfony’s messenger:consume for critical paths.
    • Gradually migrate job classes to Symfony Message interface.
    • Implement monitoring (e.g., Prometheus metrics, Sentry error tracking).
  4. Phase 4: Optimization
    • Tune Redis memory limits, eviction policies, and worker concurrency.
    • Explore Redis Streams for persistent or fanout workloads.

Compatibility

Feature Symfony Redis Messenger Laravel Queues Notes
Job Serialization Symfony Message Illuminate\Bus\Queueable Requires adapter or manual conversion.
Retry Logic Built-in (exponential backoff) queue:retry table Symfony’s retries may need customization.
Dead-Letter Queues Yes (configurable) Yes (failed_jobs table) Use Redis keyspaces for isolation.
Delay Queues Yes Yes Symfony uses delay stamp.
Horizontal Scaling Yes (worker-based) Yes Both support multiple workers.
Monitoring Prometheus metrics Horizon/Laravel Telescope Custom integration needed.
Redis Persistence No (
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.
besmartand-pro/php-quality-config
sentix/ai-chatbot
terminal42/code-quality-tools
codifyo/ts-generator-bundle
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