b2pweb/bdf-queue-messenger-bundle
Installation:
composer require b2pweb/bdf-queue-messenger-bundle
Add to config/bundles.php:
Bdf\QueueMessengerBundle\BdfQueueMessengerBundle::class => ['all' => true],
Configure Messenger:
Edit config/packages/messenger.yaml:
framework:
messenger:
transports:
async: 'bdfqueue://my_bus?consumer_timeout=1&stamp_serializer=null'
First Use Case:
Dispatch a message to the async transport:
use Symfony\Component\Messenger\MessageBusInterface;
public function __construct(private MessageBusInterface $bus) {}
public function sendEmail(): void
{
$this->bus->dispatch(new SendEmailMessage('user@example.com'));
}
Run Worker:
php bin/console messenger:consume async -vv
Transport Configuration:
Define transports in messenger.yaml:
transports:
async: 'bdfqueue://my_bus?consumer_timeout=1&stamp_serializer=null'
sync: 'bdfqueue://my_bus?consumer_timeout=0' # Sync processing
consumer_timeout: Delay in seconds between consumer checks (0 = immediate).stamp_serializer: Disable if using custom serialization.Message Handling: Create a message class and handler:
// src/Message/SendEmailMessage.php
class SendEmailMessage implements MessageInterface {
public function __construct(private string $email) {}
public function getEmail(): string { return $this->email; }
}
// src/MessageHandler/SendEmailHandler.php
class SendEmailHandler {
public function __invoke(SendEmailMessage $message) {
// Logic to send email
}
}
Routing Messages: Route messages to specific transports:
framework:
messenger:
routing:
'App\Message\SendEmailMessage': async
'App\Message\UrgentEmailMessage': sync
Worker Management:
php bin/console messenger:consume async --limit=10 # Process 10 messages
--time-limit to control runtime.Retry Logic:
Configure retry middleware in messenger.yaml:
framework:
messenger:
failure_transport: failed
transports:
failed: 'bdfqueue://failed_bus'
middleware:
- 'doctrine_transaction' # Auto-retry on failure
MessageBusInterface into services for async operations.doctrine_transaction middleware for database consistency.Bdf\Queue\Transport\AbstractTransport for custom queue backends.Symfony\Component\Messenger\Stamp\SentToTransportStamp.Worker Stuck in Loop:
consumer_timeout=0 with no delay logic.consumer_timeout to a small value (e.g., 1) or use --limit.Serialization Errors:
__serialize()/__unserialize().MessageInterface or configure stamp_serializer: null.Failed Messages:
failure_transport and check failed queue:
php bin/console messenger:consume failed
Missing Dependencies:
b2pweb/bdf-queue not installed (required for dev).composer.json:
"require-dev": {
"b2pweb/bdf-queue": "^1.0"
}
var/log/dev.log for messenger events.bdf-queue CLI tools (if installed) to list messages:
php bin/console bdf:queue:list
symfony/messenger profiler for real-time monitoring.Custom Transport:
Extend Bdf\Queue\Transport\AbstractTransport and register via DI:
services:
App\Transport\CustomTransport:
tags: ['messenger.transport']
Middleware:
Add custom middleware to messenger.yaml:
middleware:
- 'App\Middleware\LogMessageMiddleware'
Stamp Handling:
Use Symfony\Component\Messenger\Stamp\StampInterface for metadata (e.g., timestamps, retries).
Configuration Overrides:
Override bundle config via config/packages/bdf_queue_messenger.yaml:
bdf_queue_messenger:
default_bus: 'my_custom_bus'
How can I help you explore Laravel packages today?