Skip to content

Commit

Permalink
[Messenger] Describe the doctrine tranport
Browse files Browse the repository at this point in the history
  • Loading branch information
vincenttouzet committed Mar 31, 2019
1 parent cd5c7eb commit 4f4ac88
Showing 1 changed file with 214 additions and 0 deletions.
214 changes: 214 additions & 0 deletions messenger/doctrine-transport.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,214 @@
.. index::
single: Messenger; Use doctrine as a transport

Use Doctrine as transport
=========================

The Messenger component comes with a Doctrine transport. This lets doctrine handle the storage of your messages. To use it you need to define the transport as the following:

.. configuration-block::

.. code-block:: yaml
# config/packages/messenger.yaml
framework:
messenger:
transports:
doctrine: "doctrine://default"
.. code-block:: xml
<!-- config/packages/messenger.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:framework="http://symfony.com/schema/dic/symfony"
xsi:schemaLocation="http://symfony.com/schema/dic/services
http://symfony.com/schema/dic/services/services-1.0.xsd
http://symfony.com/schema/dic/symfony
http://symfony.com/schema/dic/symfony/symfony-1.0.xsd">
<framework:config>
<framework:messenger>
<framework:transport name="doctrine" dsn="doctrine://default" />
</framework:messenger>
</framework:config>
</container>
.. code-block:: php
// config/packages/messenger.php
$container->loadFromExtension('framework', array(
'messenger' => array(
'transports' => array(
'doctrine' => 'doctrine://default',
),
),
));
The format of the DSN is `doctrine://<connection_name>`. The connection name is the name you used in the doctrine configuration. If you only use one connection then use `default`.

If you have multiple Doctrine connections defined you can choose the desired one. If you have a connection named `legacy` the you should use the following DSN : `doctrine://legacy`.

Customize table name
--------------------

By default the transport will create a table named `messenger_messages` but you can configure it per transport:

.. configuration-block::

.. code-block:: yaml
# config/packages/messenger.yaml
framework:
messenger:
transports:
doctrine:
dsn: "doctrine://default?table_name=custom_table_name_for_messages"
.. code-block:: xml
<!-- config/packages/messenger.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:framework="http://symfony.com/schema/dic/symfony"
xsi:schemaLocation="http://symfony.com/schema/dic/services
http://symfony.com/schema/dic/services/services-1.0.xsd
http://symfony.com/schema/dic/symfony
http://symfony.com/schema/dic/symfony/symfony-1.0.xsd">
<framework:config>
<framework:messenger>
<framework:transport name="doctrine" dsn="doctrine://default?table_name=custom_table_name_for_messages" />
</framework:messenger>
</framework:config>
</container>
.. code-block:: php
// config/packages/messenger.php
$container->loadFromExtension('framework', array(
'messenger' => array(
'transports' => array(
'doctrine' => array(
'dsn' => 'doctrine://default?table_name=custom_table_name_for_messages',
),
),
),
));
Use the same table for different messages
-----------------------------------------

If you want to store the messages in the same table you can configure the `queue_name` option.

.. configuration-block::

.. code-block:: yaml
# config/packages/messenger.yaml
framework:
messenger:
transports:
doctrine:
dsn: "doctrine://default?queue_name=custom_queue"
.. code-block:: xml
<!-- config/packages/messenger.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:framework="http://symfony.com/schema/dic/symfony"
xsi:schemaLocation="http://symfony.com/schema/dic/services
http://symfony.com/schema/dic/services/services-1.0.xsd
http://symfony.com/schema/dic/symfony
http://symfony.com/schema/dic/symfony/symfony-1.0.xsd">
<framework:config>
<framework:messenger>
<framework:transport name="doctrine" dsn="doctrine://default?queue_name=custom_queue" />
</framework:messenger>
</framework:config>
</container>
.. code-block:: php
// config/packages/messenger.php
$container->loadFromExtension('framework', array(
'messenger' => array(
'transports' => array(
'doctrine' => 'doctrine://default?queue_name=custom_queue',
),
),
));
Available options
-----------------

Options for the transport can be configure on the DSN or as options of the transport.

.. configuration-block::

.. code-block:: yaml
# config/packages/messenger.yaml
framework:
messenger:
transports:
doctrine_short: "doctrine://default?queue_name=custom_queue"
doctrine_full:
dsn: "doctrine://default"
options:
queue_name: custom_queue
.. code-block:: xml
<!-- config/packages/messenger.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:framework="http://symfony.com/schema/dic/symfony"
xsi:schemaLocation="http://symfony.com/schema/dic/services
http://symfony.com/schema/dic/services/services-1.0.xsd
http://symfony.com/schema/dic/symfony
http://symfony.com/schema/dic/symfony/symfony-1.0.xsd">
<framework:config>
<framework:messenger>
<framework:transport name="doctrine_short" dsn="doctrine://default?queue_name=custom_queue" />
<framework:transport name="doctrine_full" dsn="doctrine://default">
<framework:option queue_name="custom_queue" />
</framework:transport>
</framework:messenger>
</framework:config>
</container>
.. code-block:: php
// config/packages/messenger.php
$container->loadFromExtension('framework', array(
'messenger' => array(
'transports' => array(
'doctrine_short' => 'dsn' => 'doctrine://default?queue_name=custom_queue',
'doctrine_full' => array(
'dsn' => 'doctrine://default',
'options' => array(
'queue_name' => 'custom_queue'
)
),
),
),
));
Options defined in the options transport takes precedence over the ones defined in the DSN.

+-------------------+--------------------------------------------------------------------------------------------------------------------------+--------------------+
| Option + Description | Default |
+-------------------+--------------------------------------------------------------------------------------------------------------------------+--------------------+
| table_name | Name of the table | messenger_messages |
| queue_name | Name of the queue | default |
| redeliver_timeout | Timeout before redeliver messages still in handling state (i.e: delivered_at is not null and message is still in table). | 3600 |
| auto_setup | Whether the table should be created automatically during send / get. | true |
+-------------------+--------------------------------------------------------------------------------------------------------------------------+--------------------+

0 comments on commit 4f4ac88

Please sign in to comment.