thomasdcodes/pdo-messenger-transport

Gives the possibility to use the symfony messenger transport with a pdo connected database.

Maintainers

Package info

github.com/thomasdcodes/pdo-messenger-transport

Type:symfony-bundle

pkg:composer/thomasdcodes/pdo-messenger-transport

Statistics

Installs: 10

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

0.1.9 2026-03-13 14:25 UTC

This package is auto-updated.

Last update: 2026-03-13 14:26:43 UTC


README

General

This Symfony bundle provides a PDO-based transport for the Symfony Messenger component. It serves as a lightweight alternative to the official Doctrine transport, specifically designed for projects that do not use Doctrine ORM or DBAL but still require a reliable database-backed message queue.

Installation

1. Register the bundle

Add the bundle to your config/bundles.php:

return [
    // ...
    Tdc\PdoMessengerTransport\TdcPdoMessengerTransport::class => ['all' => true],
];

2. Prepare the database

Execute the following Query to create the database table:

CREATE TABLE messenger_messages (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    body LONGTEXT NOT NULL,
    headers LONGTEXT NOT NULL,
    queue_name VARCHAR(190) NOT NULL,
    available_at DATETIME NOT NULL,
    delivered_at DATETIME DEFAULT NULL,
    created_at DATETIME NOT NULL
);

Configuration

1. Register the PDO Service

The bundle requires a \PDO instance to be registered in your service container. You can define a new PDO service or use an existing one (e.g., from Doctrine):

# config/services.yaml
services:
    # Option A: Create a new PDO service
    PDO:
        class: PDO
        arguments:
            - "mysql:host=%env(DB_HOST)%;dbname=%env(DB_NAME)%"
            - "%env(DB_USER)%"
            - "%env(DB_PASSWORD)%"

    # Option B: Use Doctrine's connection
    # PDO:
    #     class: PDO
    #     factory: ['@database_connection', 'getNativeConnection']

2. Global Bundle Configuration (Mandatory if you don't use autowiring for PDO)

Create config/packages/tdc_pdo_messenger_transport.yaml:

tdc_pdo_messenger_transport:
    pdo_service: 'PDO' # The ID of your PDO service (from step 1)
    table_name: 'messenger_messages' # optional, default: messenger_messages

If you don't provide a pdo_service, the bundle will try to autowire a \PDO instance.

3. Configure Symfony Messenger

In your messenger configuration, use the pdoqueue:// DSN.

# config/packages/messenger.yaml
framework:
    messenger:
        transports:
            async: 'pdoqueue://default'

Usage

Run the messenger worker as usual:

php bin/console messenger:consume async