@@ -35,18 +35,17 @@ public function process(ContainerBuilder $container): void
3535 $ receivers [$ tags [0 ]['alias ' ]] = true ;
3636 }
3737
38- $ scheduleProviders = [];
38 + $ scheduleProviderIds = [];
3939 foreach ($ container ->findTaggedServiceIds ('scheduler.schedule_provider ' ) as $ serviceId => $ tags ) {
4040 $ name = $ tags [0 ]['name ' ];
41- $ scheduleProviders [$ name ] = $ container -> getDefinition ( $ serviceId) ;
41+ $ scheduleProviderIds [$ name ] = $ serviceId ;
4242 }
4343
44+ $ tasksPerSchedule = [];
4445 foreach ($ container ->findTaggedServiceIds ('scheduler.task ' ) as $ serviceId => $ tags ) {
4546 foreach ($ tags as $ tagAttributes ) {
4647 $ serviceDefinition = $ container ->getDefinition ($ serviceId );
4748 $ scheduleName = $ tagAttributes ['schedule ' ] ?? 'default ' ;
48- $ scheduleProviders [$ scheduleName ] ??= $ container ->setDefinition ("scheduler.provider. $ scheduleName " , new Definition (Schedule::class))
49- ->addTag ('scheduler.schedule_provider ' , ['name ' => $ scheduleName ]);
5049
5150 if ($ serviceDefinition ->hasTag ('console.command ' )) {
5251 $ message = new Definition (RunCommandMessage::class, [$ serviceDefinition ->getClass ()::getDefaultName ().(empty ($ tagAttributes ['arguments ' ]) ? '' : " {$ tagAttributes ['arguments ' ]}" )]);
@@ -72,19 +71,33 @@ public function process(ContainerBuilder $container): void
7271 ],
7372 }, fn ($ value ) => null !== $ value );
7473
75- $ taskDefinition = (new Definition (RecurringMessage::class))
74+ $ tasksPerSchedule [ $ scheduleName ][] = $ taskDefinition = (new Definition (RecurringMessage::class))
7675 ->setFactory ([RecurringMessage::class, $ tagAttributes ['trigger ' ]])
7776 ->setArguments ($ taskArguments );
7877
7978 if ($ tagAttributes ['jitter ' ] ?? false ) {
8079 $ taskDefinition ->addMethodCall ('withJitter ' , [$ tagAttributes ['jitter ' ]], true );
8180 }
81+ }
82+ }
8283
83- $ scheduleProviders [$ scheduleName ]->addMethodCall ('add ' , [$ taskDefinition ]);
84+ foreach ($ tasksPerSchedule as $ scheduleName => $ tasks ) {
85+ $ id = "scheduler.provider. $ scheduleName " ;
86+ $ schedule = (new Definition (Schedule::class))->addMethodCall ('add ' , $ tasks );
87+
88+ if (isset ($ scheduleProviderIds [$ scheduleName ])) {
89+ $ schedule
90+ ->setFactory ([new Reference ('.inner ' ), 'getSchedule ' ])
91+ ->setDecoratedService ($ scheduleProviderIds [$ scheduleName ]);
92+ } else {
93+ $ schedule ->addTag ('scheduler.schedule_provider ' , ['name ' => $ scheduleName ]);
94+ $ scheduleProviderIds [$ scheduleName ] = $ id ;
8495 }
96+
97+ $ container ->setDefinition ($ id , $ schedule );
8598 }
8699
87- foreach (array_keys ($ scheduleProviders ) as $ name ) {
100+ foreach (array_keys ($ scheduleProviderIds ) as $ name ) {
88101 $ transportName = 'scheduler_ ' .$ name ;
89102
90103 // allows to override the default transport registration
0 commit comments