queue-interop/amqp-interop
Set of PHP interfaces and contracts for AMQP messaging interoperability. Standardizes producers, consumers, contexts and messages so different AMQP client libraries and queue implementations can be swapped without changing application code.
amqp-interop package aligns well with Laravel’s native queue system (e.g., Illuminate\Queue) but extends it to support AMQP (Advanced Message Queuing Protocol) via the queue-interop standard. This is particularly valuable for:
sync, database, redis) are insufficient for high-throughput or distributed workloads.Queue facade and QueueWorker but replaces the underlying transport layer. This minimizes changes to existing queue logic (e.g., dispatch(), delay(), afterCommit()).laravel-queue drivers.php-amqplib or ext-amqp) or a compatible library like videlalvaro/php-amqplib.amqp).queue:work command may need adjustments (e.g., custom worker classes for AMQP-specific logic like manual acknowledgments).| Risk Area | Description | Mitigation Strategy |
|---|---|---|
| Message Persistence | AMQP brokers may drop messages if consumers fail to acknowledge them. | Implement manual acknowledgments in worker classes and retry logic. |
| Connection Resilience | AMQP connections can be flaky (network issues, broker restarts). | Use Laravel’s queue retry logic and configure amqp-lib connection recovery. |
| Performance Overhead | AMQP adds latency vs. Redis/SQL queues. | Benchmark throughput and consider batch processing or prefetch counts. |
| Schema/Contract Mismatch | AMQP messages may not align with Laravel’s job payload structure. | Standardize on JSON payloads or use a message adapter (e.g., amqp-interop’s Message interface). |
| Monitoring Gaps | Laravel’s queue monitoring (e.g., failed_jobs table) may not cover AMQP. |
Integrate AMQP broker metrics (e.g., RabbitMQ management API) with Laravel monitoring. |
| Vendor Lock-in | AMQP-specific features (e.g., exchanges) may not be portable. | Abstract AMQP logic behind interfaces for easier migration to other brokers (e.g., Kafka via queue-interop). |
Illuminate\Contracts\Queue\Queue interface, allowing it to replace or extend existing queue drivers.afterCommit).php-amqplib (recommended) or ext-amqp (if available).reactphp/amqp (for async PHP) or enqueue/amqp-ext (if using Enqueue bundle).Phase 1: Proof of Concept (PoC)
queue:listen and queue:work --once for testing.Phase 2: Hybrid Deployment
queue config to use AMQP for certain connections:
'connections' => [
'amqp' => [
'driver' => 'amqp',
'host' => env('AMQP_HOST', 'localhost'),
'port' => env('AMQP_PORT', 5672),
'user' => env('AMQP_USER', 'guest'),
'password' => env('AMQP_PASSWORD', 'guest'),
'vhost' => env('AMQP_VHOST', '/'),
'queue' => env('AMQP_QUEUE', 'laravel'),
'options' => [
'prefetch_count' => 10, // Adjust based on workload
'acknowledge_mode' => AMQP_AUTOACK, // Or MANUAL for control
],
],
],
Dispatch::onConnection('amqp')->dispatch(new HighPriorityJob());
Phase 3: Full Migration
Phase 4: Optimization
How can I help you explore Laravel packages today?