@@ -323,7 +323,7 @@ etc) instead of the object::
323
323
324
324
// src/Message/NewUserWelcomeEmail.php
325
325
namespace App\Message;
326
-
326
+
327
327
class NewUserWelcomeEmail
328
328
{
329
329
private $userId;
@@ -671,6 +671,54 @@ this is configurable for each transport:
671
671
# implements Symfony\Component\Messenger\Retry\RetryStrategyInterface
672
672
# service: null
673
673
674
+ .. code-block :: xml
675
+
676
+ <!-- config/packages/messenger.xml -->
677
+ <?xml version =" 1.0" encoding =" UTF-8" ?>
678
+ <container xmlns =" http://symfony.com/schema/dic/services"
679
+ xmlns : xsi =" http://www.w3.org/2001/XMLSchema-instance"
680
+ xmlns : framework =" http://symfony.com/schema/dic/symfony"
681
+ xsi : schemaLocation =" http://symfony.com/schema/dic/services
682
+ https://symfony.com/schema/dic/services/services-1.0.xsd
683
+ http://symfony.com/schema/dic/symfony
684
+ https://symfony.com/schema/dic/symfony/symfony-1.0.xsd" >
685
+
686
+ <framework : config >
687
+ <framework : messenger >
688
+ <framework : transport name =" async_priority_high" dsn =" %env(MESSENGER_TRANSPORT_DSN)%?queue_name=high_priority" >
689
+ <framework : retry-strategy max-retries =" 3" delay =" 1000" multiplier =" 2" max-delay =" 0" />
690
+ </framework : transport >
691
+ </framework : messenger >
692
+ </framework : config >
693
+ </container >
694
+
695
+ .. code-block :: php
696
+
697
+ // config/packages/messenger.php
698
+ $container->loadFromExtension('framework', [
699
+ 'messenger' => [
700
+ 'transports' => [
701
+ 'async_priority_high' => [
702
+ 'dsn' => '%env(MESSENGER_TRANSPORT_DSN)%',
703
+
704
+ // default configuration
705
+ 'retry_strategy' => [
706
+ 'max_retries' => 3,
707
+ // milliseconds delay
708
+ 'delay' => 1000,
709
+ // causes the delay to be higher before each retry
710
+ // e.g. 1 second delay, 2 seconds, 4 seconds
711
+ 'multiplier' => 2,
712
+ 'max_delay' => 0,
713
+ // override all of this with a service that
714
+ // implements Symfony\Component\Messenger\Retry\RetryStrategyInterface
715
+ // 'service' => null,
716
+ ],
717
+ ],
718
+ ],
719
+ ],
720
+ ]);
721
+
674
722
Avoiding Retrying
675
723
~~~~~~~~~~~~~~~~~
676
724
@@ -702,6 +750,46 @@ be discarded. To avoid this happening, you can instead configure a ``failure_tra
702
750
703
751
failed : ' doctrine://default?queue_name=failed'
704
752
753
+ .. code-block :: xml
754
+
755
+ <!-- config/packages/messenger.xml -->
756
+ <?xml version =" 1.0" encoding =" UTF-8" ?>
757
+ <container xmlns =" http://symfony.com/schema/dic/services"
758
+ xmlns : xsi =" http://www.w3.org/2001/XMLSchema-instance"
759
+ xmlns : framework =" http://symfony.com/schema/dic/symfony"
760
+ xsi : schemaLocation =" http://symfony.com/schema/dic/services
761
+ https://symfony.com/schema/dic/services/services-1.0.xsd
762
+ http://symfony.com/schema/dic/symfony
763
+ https://symfony.com/schema/dic/symfony/symfony-1.0.xsd" >
764
+
765
+ <framework : config >
766
+ <!-- after retrying, messages will be sent to the "failed" transport -->
767
+ <framework : messenger failure-transport =" failed" >
768
+ <!-- ... other transports -->
769
+
770
+ <framework : transport name =" failed" dsn =" doctrine://default?queue_name=failed" />
771
+ </framework : messenger >
772
+ </framework : config >
773
+ </container >
774
+
775
+ .. code-block :: php
776
+
777
+ // config/packages/messenger.php
778
+ $container->loadFromExtension('framework', [
779
+ 'messenger' => [
780
+ // after retrying, messages will be sent to the "failed" transport
781
+ 'failure_transport' => 'failed',
782
+
783
+ 'transports' => [
784
+ // ... other transports
785
+
786
+ 'failed' => [
787
+ 'dsn' => 'doctrine://default?queue_name=failed',
788
+ ],
789
+ ],
790
+ ],
791
+ ]);
792
+
705
793
In this example, if handling a message fails 3 times (default ``max_retries ``),
706
794
it will then be sent to the ``failed `` transport. While you *can * use
707
795
``messenger:consume failed `` to consume this like a normal transport, you'll
@@ -955,6 +1043,38 @@ override it in the ``test`` environment to use this transport:
955
1043
transports :
956
1044
async_priority_normal : ' in-memory:///'
957
1045
1046
+ .. code-block: : xml
1047
+
1048
+ <!-- config/packages/messenger.xml -->
1049
+ <?xml version="1.0" encoding="UTF-8" ?>
1050
+ <container xmlns="http://symfony.com/schema/dic/services"
1051
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
1052
+ xmlns:framework="http://symfony.com/schema/dic/symfony"
1053
+ xsi:schemaLocation="http://symfony.com/schema/dic/services
1054
+ https://symfony.com/schema/dic/services/services-1.0.xsd
1055
+ http://symfony.com/schema/dic/symfony
1056
+ https://symfony.com/schema/dic/symfony/symfony-1.0.xsd">
1057
+
1058
+ <framework:config>
1059
+ <framework:messenger>
1060
+ <framework:transport name="async_priority_normal" dsn="in-memory:///"/>
1061
+ </framework:messenger>
1062
+ </framework:config>
1063
+ </container>
1064
+
1065
+ .. code-block: : php
1066
+
1067
+ // config/packages/messenger.php
1068
+ $container->loadFromExtension('framework', [
1069
+ ' messenger' => [
1070
+ ' transports' => [
1071
+ ' async_priority_normal' => [
1072
+ ' dsn' => 'in-memory:///',
1073
+ ],
1074
+ ],
1075
+ ],
1076
+ ]);
1077
+
958
1078
Then, while testing, messages will *not * be delivered to the real transport.
959
1079
Even better, in a test, you can check that exactly one message was sent
960
1080
during a request::
@@ -1020,6 +1140,52 @@ this globally (or for each transport) to a service that implements
1020
1140
dsn : # ...
1021
1141
serializer : messenger.transport.symfony_serializer
1022
1142
1143
+ .. code-block :: xml
1144
+
1145
+ <!-- config/packages/messenger.xml -->
1146
+ <?xml version =" 1.0" encoding =" UTF-8" ?>
1147
+ <container xmlns =" http://symfony.com/schema/dic/services"
1148
+ xmlns : xsi =" http://www.w3.org/2001/XMLSchema-instance"
1149
+ xmlns : framework =" http://symfony.com/schema/dic/symfony"
1150
+ xsi : schemaLocation =" http://symfony.com/schema/dic/services
1151
+ https://symfony.com/schema/dic/services/services-1.0.xsd
1152
+ http://symfony.com/schema/dic/symfony
1153
+ https://symfony.com/schema/dic/symfony/symfony-1.0.xsd" >
1154
+
1155
+ <framework : config >
1156
+ <framework : messenger >
1157
+ <framework : serializer default-serializer =" messenger.transport.symfony_serializer" >
1158
+ <framework : symfony-serializer format =" json" >
1159
+ <framework : context />
1160
+ </framework : symfony-serializer >
1161
+ </framework : serializer >
1162
+
1163
+ <framework : transport name =" async_priority_normal" dsn =" ..." serializer =" messenger.transport.symfony_serializer" />
1164
+ </framework : messenger >
1165
+ </framework : config >
1166
+ </container >
1167
+
1168
+ .. code-block :: php
1169
+
1170
+ // config/packages/messenger.php
1171
+ $container->loadFromExtension('framework', [
1172
+ 'messenger' => [
1173
+ 'serializer' => [
1174
+ 'default_serializer' => 'messenger.transport.symfony_serializer',
1175
+ 'symfony_serializer' => [
1176
+ 'format' => 'json',
1177
+ 'context' => [],
1178
+ ],
1179
+ ],
1180
+ 'transports' => [
1181
+ 'async_priority_normal' => [
1182
+ 'dsn' => // ...
1183
+ 'serializer' => 'messenger.transport.symfony_serializer',
1184
+ ],
1185
+ ],
1186
+ ],
1187
+ ]);
1188
+
1023
1189
The ``messenger.transport.symfony_serializer `` is a built-in service that uses
1024
1190
the :doc: `Serializer component </serializer >` and can be configured in a few ways.
1025
1191
If you *do * choose to use the Symfony serializer, you can control the context
0 commit comments