Installation:
composer require b2pweb/bdf-queue
Add the service provider to config/app.php:
'providers' => [
// ...
B2PWeb\BDFQueue\BDFQueueServiceProvider::class,
],
Configuration: Publish the config file:
php artisan vendor:publish --provider="B2PWeb\BDFQueue\BDFQueueServiceProvider"
Edit config/bdf-queue.php to define your broker (e.g., Redis, RabbitMQ, SQS).
First Use Case: Dispatch a job:
use B2PWeb\BDFQueue\Queue;
Queue::dispatch(new \App\Jobs\ProcessOrder);
Key Files:
config/bdf-queue.php: Broker settings.app/Jobs/: Your job classes (must implement B2PWeb\BDFQueue\Contracts\Job).Job Dispatching:
// Dispatch with payload
Queue::dispatch(new ProcessOrder, ['order_id' => 123]);
// Dispatch with delay (seconds)
Queue::later(60, new ProcessOrder);
Job Handling:
Extend B2PWeb\BDFQueue\Contracts\Job:
namespace App\Jobs;
use B2PWeb\BDFQueue\Contracts\Job;
class ProcessOrder implements Job {
public function handle() {
// Job logic here
}
}
Broker-Specific Config:
Define adapters in config/bdf-queue.php:
'connections' => [
'redis' => [
'driver' => 'redis',
'host' => '127.0.0.1',
'queue' => 'default',
],
'sqs' => [
'driver' => 'aws',
'key' => env('AWS_KEY'),
'secret' => env('AWS_SECRET'),
'queue' => 'my-queue',
],
],
Middleware Integration:
Register middleware in config/bdf-queue.php:
'middleware' => [
\App\Middleware\LogJob::class,
],
Batch Processing:
Queue::batch([
new ProcessOrder(1),
new ProcessOrder(2),
])->dispatch();
Queue::dispatch() for consistency.Serializable or Arrayable).B2PWeb\BDFQueue\Contracts\Job::failed() for retries.Broker-Specific Quirks:
queue:*).sqs:SendMessage and sqs:ReceiveMessage.Job Deserialization:
json_encode/json_decode for complex data).Connection Failures:
config/bdf-queue.php:
'fallback' => 'database',
Middleware Order:
config/bdf-queue.php. Place RetryMiddleware early if needed.'logging' => true in config/queue.php).job.processing and job.failed events:
event(new JobProcessing($job));
redis-cli monitor.Custom Drivers:
Implement B2PWeb\BDFQueue\Contracts\Driver for unsupported brokers (e.g., Kafka):
class KafkaDriver implements Driver {
public function push($job, $data) { ... }
public function pop() { ... }
}
Job Metadata:
Attach metadata via Queue::dispatch($job, [], ['priority' => 5]).
Testing:
Use Queue::fake() for unit tests:
Queue::fake();
Queue::dispatch(new ProcessOrder);
Queue::assertPushed(ProcessOrder::class);
Performance:
Queue::dispatchSync() for critical, synchronous tasks (bypasses the queue).How can I help you explore Laravel packages today?