EventMessageHandlerInterface) simplifies decoupling producers/consumers.Console/FrameworkBundle (e.g., via symfony/console-bridge or Laravel’s Symfony integration). The core AMQP logic (via php-amqplib) is framework-agnostic.php-amqplib/rabbitmq-bundle), focusing on handler-based consumption—ideal for apps needing fine-grained control over message processing.MessageProducer) with type-based routing to exchanges. Laravel’s queue system (e.g., bus or queue helpers) could wrap this for consistency.Illuminate\Contracts\Container\Container or symfony/dependency-injection).FailedEventInterface).EventDispatcher/Console components. Mitigation:
symfony/console with Laravel’s Artisan or a minimal CLI wrapper.php-amqplib/rabbitmq-bundle:^2.7. Ensure Laravel’s php-amqplib version (e.g., v3.x) is backward-compatible.queue:work) interact with Symfony-style consumers? Will a hybrid worker (e.g., php artisan rabbit:consume) be needed?Illuminate\Queue\Serializers\JsonSerializer) align with this?failed:table or a custom retry queue be used?sync, database, redis) for throughput/latency.Queue::fake()) that can mock RabbitMQ interactions?MessageProducer in a Laravel facade/service (e.g., RabbitMQ::publish()) to mimic Laravel’s bus() or queue() helpers.php artisan rabbit:consume event).symfony/framework-bundle with symfony/console-bridge + symfony/dependency-injection.illuminate/support for array/object utilities (e.g., collect()).queue:work with php-amqplib directly (avoiding Symfony overhead).Phase 1: Producer Integration
MessageProducer:
// app/Services/RabbitMQ.php
class RabbitMQ {
public function publish(string $type, array $data): void {
$producer = app()->make(MessageProducer::class);
$producer->publish($type, json_encode($data));
}
}
bus() calls with RabbitMQ::publish().Phase 2: Consumer Setup
// app/Console/Commands/ConsumeRabbitEvents.php
class ConsumeRabbitEvents extends Command {
protected $signature = 'rabbit:consume {queue?}';
public function handle() {
$consumer = app()->make(Consumer::class);
$consumer->consume($this->argument('queue') ?? 'event');
}
}
* * * * * php artisan rabbit:consume).Phase 3: Failure Handling
// app/Models/FailedEvent.php
class FailedEvent extends Model implements FailedEventInterface {
use HasFactory;
// Implement FailedEventInterface methods
}
arthem_rabbit.yaml to point to Eloquent’s connection.symfony/dependency-injection).Console with Laravel’s Artisan for consumer commands.php-amqplib versions align (e.g., Laravel’s v3.x may need polyfills for v2.7 APIs).symfony/console-bridge, php-amqplib)..env (e.g., RABBITMQ_HOST).Queue::fake() to verify message routing.php artisan rabbit:consume --verbose.retry-after or a custom queue).arthem/rabbit-bundle for Symfony v7+ compatibility.php-amqplib and Symfony components to avoid version conflicts.composer.json overrides for strict versioning.queue:failed-table for consumer errors.Monolog integration).rabbit:queues).rabbit:replay {id}).README.md section covering:
queue:work --daemon).basic_qos in AMQP).memory_limit adjustments).php artisan rabbit:consume --limit=1000.| Component | Failure Mode | Mitigation |
|---|---|---|
| RabbitMQ Connection | Broker downtime | Implement circuit breakers (e.g., php-amqplib retries + Laravel cache fallback). |
| Consumer Process | Worker crashes | Use Laravel’s queue:work --tries=3 + supervisor for process restart. |
| Message Processing | Handler exceptions | Log to failed_events table; use Laravel’s retry() helper. |
| Database | Eloquent connection issues | Queue failure logging to a dead-letter queue (DLQ) for offline recovery. |
| Serialization | Invalid JSON/PHP data | Validate messages in handlers; use Laravel’s Validator for schema checks. |
How can I help you explore Laravel packages today?