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

Asynchronous Bundle Laravel Package

simple-bus/asynchronous-bundle

Symfony bundle for asynchronous command/event handling with SimpleBus. Integrates async middleware and message dispatching so work can be queued and processed later. Part of the SimpleBus ecosystem; docs and issue tracking in the main repository.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture Fit

  • Laravel Compatibility: The package is designed for Symfony but can be adapted for Laravel via service providers or custom queue listeners. Laravel’s Symfony-based components (e.g., DependencyInjection, EventDispatcher) enable partial integration, but native Laravel queue systems (e.g., queue:work) may conflict or require workarounds.
  • Asynchronous Workflows: Ideal for decoupling synchronous operations (e.g., background jobs, notifications, or data processing) where event-driven architecture is preferred over task queues. Aligns with Laravel’s job queues but offers stronger typing (PHP interfaces) and message routing.
  • Legacy System Integration: Useful for migrating legacy Symfony apps to Laravel while retaining async capabilities without rewriting.
  • Microservices: Supports inter-service communication via messages, though Laravel’s service containers and event system may already fulfill similar needs.

Integration Feasibility

  • Queue System Overlap: Laravel’s built-in queues (database, redis, beanstalkd) handle async tasks natively. SimpleBus adds message-driven abstraction but requires:
    • Custom adapters to bridge SimpleBus messages with Laravel’s queue drivers.
    • Serialization/deserialization logic (e.g., JSON, PHP serialize) between SimpleBus and Laravel’s payload format.
  • Symfony Dependency: Laravel lacks native Symfony bundle support, so integration requires:
    • A Laravel service provider to load the bundle.
    • Middleware or listeners to translate SimpleBus messages to Laravel jobs.
  • Message Storage: SimpleBus relies on a message store (e.g., database, Redis). Laravel’s queue drivers could host messages, but schema mismatches may arise (e.g., Laravel’s failed_jobs table vs. SimpleBus’s storage).

Technical Risk

Risk Area Severity Mitigation Strategy
Deprecated Package High Last release in 2016; evaluate forks (e.g., Symfony Messenger) or alternatives like Laravel Horizon.
Queue Driver Conflicts Medium Test serialization/deserialization between SimpleBus and Laravel’s queue adapters (e.g., Redis, database).
Lack of Laravel Features Medium Extend SimpleBus with Laravel-specific listeners (e.g., Illuminate\Bus\QueueingDispatcher) or use it only for message routing.
Performance Overhead Low Benchmark against native Laravel queues for throughput and latency.
Maintenance Burden Medium Document custom bridge logic; plan for migration if SimpleBus becomes unsustainable.

Key Questions

  1. Why SimpleBus over Laravel’s Native Queues?
    • Do you need strongly typed messages or event routing beyond Laravel’s job system?
    • Are you using Symfony Messenger elsewhere in the stack?
  2. Queue Backend Compatibility:
    • Can Laravel’s queue drivers (e.g., Redis) store SimpleBus messages without schema conflicts?
    • How will you handle failed jobs (e.g., SimpleBus messages vs. Laravel’s failed_jobs table)?
  3. Maintenance and Support:
    • Is the team willing to maintain a custom bridge between SimpleBus and Laravel’s queue system?
    • What’s the migration path if SimpleBus is abandoned?
  4. Alternatives:
    • Would Symfony Messenger (more active) or Laravel Horizon (Laravel-native) be a better fit?
  5. Testing:
    • How will you validate message durability (e.g., retries, dead-letter queues) across both systems?
  6. Scalability:
    • Does your use case require high throughput (e.g., 10K+ messages/sec), where SimpleBus may underperform?

Integration Approach

Stack Fit

  • Best For:
    • Laravel apps heavily integrated with Symfony (e.g., legacy codebases or hybrid architectures).
    • Projects requiring event-driven messaging with strong typing (PHP interfaces).
    • Teams already familiar with SimpleBus or Symfony Messenger.
  • Poor Fit:
    • Greenfield Laravel projects (native queues are simpler and more maintained).
    • High-throughput systems (SimpleBus lacks optimizations for Laravel’s queue drivers).
    • Teams lacking PHP/Symfony expertise (steep learning curve for custom integration).

Migration Path

  1. Phase 1: Proof of Concept
    • Install SimpleBus in a dedicated Laravel service provider.
    • Test message serialization/deserialization between SimpleBus and Laravel’s queue (e.g., Redis).
    • Example workflow:
      // Dispatch a SimpleBus message
      $message = new ProcessOrderMessage($orderId);
      $this->bus->dispatch($message);
      
      // Bridge to Laravel queue (custom logic)
      Queue::push(new ProcessOrderJob($orderId));
      
  2. Phase 2: Hybrid Integration
    • Use SimpleBus for message routing/publishing and Laravel queues for execution.
    • Example:
      • SimpleBus handles dispatching messages (e.g., OrderProcessedEvent).
      • Laravel queue listeners consume messages and execute jobs.
  3. Phase 3: Full Adoption (Optional)
    • Replace Laravel’s queue listeners with SimpleBus handlers if alignment improves.
    • Example:
      // app/Handlers/ProcessOrderHandler.php
      class ProcessOrderHandler implements MessageHandlerInterface {
          public function handle(ProcessOrderMessage $message) {
              // Business logic here
          }
      }
      

Compatibility

Component Compatibility Notes
Laravel Queues Requires custom adapters to move messages between SimpleBus and Laravel’s queue drivers.
Symfony Components Works natively with DependencyInjection, EventDispatcher, etc.
Message Serialization Must align with Laravel’s queue payload format (e.g., JSON, PHP serialize).
Database Queues Potential schema conflicts if using Laravel’s queue:table vs. SimpleBus’s storage.
Redis Queues Feasible but requires custom serialization (e.g., JSON for SimpleBus messages).
Laravel Events SimpleBus messages can trigger Laravel events, but vice versa may need listeners.

Sequencing

  1. Define Message Contracts:
    • Create PHP interfaces for messages (SimpleBus’s strength).
    • Example:
      interface ProcessOrderMessage {
          public function getOrderId(): string;
      }
      
  2. Set Up SimpleBus Bundle:
    • Install via Composer:
      composer require simple-bus/asynchronous-bundle
      
    • Configure in a Laravel service provider:
      public function register() {
          $this->mergeConfigFrom(__DIR__.'/../config/simple_bus.php', 'simple_bus');
          $this->app->register(SimpleBusAsynchronousBundle::class);
      }
      
  3. Bridge to Laravel Queues:
    • Implement a queue listener to consume SimpleBus messages:
      // app/Listeners/SimpleBusToQueueListener.php
      public function handle($message) {
          Queue::push(new LaravelJob($message->getData()));
      }
      
  4. Test Failure Scenarios:
    • Simulate queue failures, retries, and message loss.
    • Validate message durability (e.g., database-backed storage).
  5. Monitor Performance:
    • Compare latency/throughput vs. native Laravel queues using tools like Laravel Debugbar or Blackfire.

Operational Impact

Maintenance

  • Pros:
    • Decoupled architecture: SimpleBus handles message routing; Laravel handles execution.
    • Reusable message contracts: Interfaces can be shared across services.
    • Symfony integration: Leverages existing Symfony components in Laravel.
  • Cons:
    • Custom bridge code: Requires maintenance (e.g., handling serialization errors, queue conflicts).
    • Deprecated package: No active updates; rely on community forks or plan migration to Symfony Messenger.
    • Tooling gaps: Laravel’s queue:failed table won’t natively track SimpleBus messages.
  • Mitigation:
    • Document bridge logic thoroughly (e.g., serialization formats, error handling).
    • Schedule quarterly compatibility reviews with Laravel/Symfony updates.
    • Consider forking the package for critical fixes.

Support

  • Debugging Challenges:
    • Cross-system issues: Debugging may require knowledge of both SimpleBus and Laravel queues.
    • Tooling limitations: Lack of native integration with Laravel’s queue monitoring (e.g., Horizon).
  • Workarounds:
    • Log SimpleBus messages to Laravel’s failed_jobs table via a listener.
    • Use Symfony’s Profiler or custom logging
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.
craftcms/url-validator
directorytree/privacy-filter-classifier
directorytree/privacy-filter
datacore/hub-sdk
develia/commons
cuci/prototurk-sdk
cuci/prototurk-sdk-symfony
develia/geo-bundle
dreamzy/livewire-charts
touchestate-sdk/php-sdk
22h/doctrine-garbage-collection-bundle
agtp/agtp-php
agtp/mod-php
splash/sonata-admin
splash/metadata
splash/openapi
splash/scopes
splash/toolkit
testo/output-teamcity
testo/bridge-symfony