![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/mautic.corals.io/app/bundles/MessengerBundle/ |
# Messenger Bundle The bundle makes use of [Symfony's messenger component](https://symfony.com/doc/5.4/messenger.html) to dispatch and handle messages. ## Transports It creates `synchronous` transport only, it is necessary for processing in case external messenger is not used. https://symfony.com/doc/current/messenger.html#transports-async-queued-messages The only thing you need to do is to map the routing key to the transport you wish to use. https://symfony.com/doc/current/messenger.html#routing-messages-to-a-transport By default, the transport is set to **synchronous**, meaning no AMQP/Doctrine or whatsoever is used and the request is handled directly and the message is marked as synchronous process if it implements **RequestStatusInterface**. [Currently defined routes](MauticMessengerRoutes.php) are EMAIL, FAILED, SYNC and HIT although in default configuration only the SYNC is used. > https://symfony.com/doc/5.4/messenger.html#routing-messages-to-a-transport Here [a sample configuration](#sample-configuration) ## Notifications Currently, 2 messages are defined. * [EmailHitNotification](app/bundles/MessengerBundle/Message/EmailHitNotification.php) * [PageHitNotification](app/bundles/MessengerBundle/Message/PageHitNotification.php) ## Configuring transports > there is new serializer available, that uses JSON and has smaller payload than native php **'messenger.transport.jms_serializer'** that is recommended to use. You can place the following configuration sample to any config file where `$container` is available. For example `config/config_local.php` ```php $container->loadFromExtension('framework', [ 'messenger' => [ 'routing' => [ \Mautic\MessengerBundle\Message\PageHitNotification::class => \Mautic\MessengerBundle\MauticMessengerTransports::HIT, \Mautic\MessengerBundle\Message\EmailHitNotification::class => \Mautic\MessengerBundle\MauticMessengerTransports::HIT, ], 'failure_transport' => 'failed', // Define other than default if you wish 'transports' => [ 'failed' => [ 'dsn' => 'doctrine://default?queue_name=failed', ], \Mautic\MessengerBundle\MauticMessengerTransports::SYNC => 'sync://', \Mautic\MessengerBundle\MauticMessengerTransports::HIT => [ 'dsn' => '%env(MAUTIC_MESSENGER_TRANSPORT_DSN)%', 'serializer' => 'messenger.transport.jms_serializer', 'options' => [ 'heartbeat' => 1, 'persistent' => true, 'vhost' => '/', 'exchange' => [ 'name' => 'mautic', 'type' => 'direct', 'default_publish_routing_key' => 'hit', ], 'queues' => [ 'hits' => [ 'binding_keys' => ['hit'], 'arguments' => [ 'x-expires' => 60 * 60 * 24 * 21 * 1000, // queue ttl without consumer using it ], ], ], ], 'serializer' => 'messenger.transport.native_php_serializer', 'retry_strategy' => [ 'max_retries' => 3, 'delay' => 500, 'multiplier' => 3, 'max_delay' => 0, ], ], ], ], ]); ``` ## Usage In order to run consumer, simply run: ```shell sudo -uwww-data bin/console messenger:consume hit ``` > Where *hit* stands for your transport's name. In the example above; it is the value of `\Mautic\MessengerBundle\MauticMessengerTransports::HIT`