adtechpotok/enqueue-messenger-adapter-bundle
Symfony Messenger transport that uses Enqueue to send/receive messages via supported brokers (e.g., AMQP/RabbitMQ). Configure Messenger with enqueue:// DSNs, map queues/topics/exchanges, and consume with messenger:consume-messages.
Install the Package
composer require enqueue/messenger-adapter
Configure Enqueue Bundle
Add the ENQUEUE_DSN to your .env (e.g., for RabbitMQ):
ENQUEUE_DSN=amqp://guest:guest@localhost:5672/%2f
Ensure the EnqueueBundle is installed and configured.
Define a Message Class
Create a simple message class (e.g., app/Message/MyMessage.php):
namespace App\Message;
class MyMessage {
public string $content;
public function __construct(string $content) {
$this->content = $content;
}
}
Configure Messenger Transport
In config/packages/messenger.yaml:
framework:
messenger:
transports:
amqp: 'enqueue://default'
routing:
'App\Message\MyMessage': amqp
Dispatch a Message In a controller or service:
use App\Message\MyMessage;
use Symfony\Component\Messenger\MessageBusInterface;
public function sendMessage(MessageBusInterface $bus) {
$bus->dispatch(new MyMessage('Hello, Queue!'));
}
Consume Messages Run the consumer in a terminal:
php bin/console messenger:consume-messages amqp
Producer Workflow
MessageBusInterface in controllers, commands, or services.amqp transport using annotations or YAML routing.use Symfony\Component\Messenger\Attribute\AsMessage;
#[AsMessage(to: ['amqp'])]
class MyMessage { ... }
Consumer Workflow
messenger:consume-messages).[program:messenger]
command=php /path/to/bin/console messenger:consume-messages amqp
autostart=true
autorestart=true
messenger.yaml:
framework:
messenger:
failure_transport: failed
transports:
failed: 'doctrine://default?queue_name=failed'
Integration with Enqueue Brokers
transports:
amqp:
dsn: 'enqueue://default?queue[routingKey][name]=my_queue&topic[name]=my_topic'
Async Processing
handle() in message handlers for synchronous processing:
use Symfony\Component\Messenger\Attribute\AsMessageHandler;
#[AsMessageHandler]
public function __invoke(MyMessage $message) {
// Process $message->content
}
DSN Configuration
enqueue:// prefix) causes silent failures.enqueue://default?queue[name]=my_queue (not amqp://...).Consumer Lifecycle
Message Serialization
Serializable or with #[AsMessage].#[AsMessage] or implement Serializable:
#[AsMessage]
class MyMessage implements Serializable { ... }
Routing Conflicts
routing:
'App\Message\MyMessage': amqp # Overrides default
Old Package Maturity
symfony/messenger:^5.0). Fork or patch if needed.Check Consumer Logs Run consumers with verbose output:
php bin/console messenger:consume-messages amqp -vv
Inspect Queue State
Use Enqueue’s CLI tools (e.g., enqueue:consume) to verify messages:
php bin/console enqueue:consume --dsn=amqp://guest:guest@localhost:5672/%2f
Enable Messenger Debug
Add to config/packages/dev/messenger.yaml:
framework:
messenger:
transports:
amqp: 'enqueue://default?debug=true'
Custom Transport Configuration Extend the transport DSN for advanced broker settings:
transports:
amqp:
dsn: 'enqueue://default?queue[durable]=true&queue[exclusive]=false'
Middleware Integration Add middleware to messages (e.g., logging, validation):
framework:
messenger:
transports:
amqp:
dsn: 'enqueue://default'
middleware:
- 'App\Middleware\LogMessageMiddleware'
Dynamic Routing Use runtime logic to route messages dynamically:
$bus->dispatch(new MyMessage($content), ['routing_key' => 'dynamic_queue']);
How can I help you explore Laravel packages today?