@@ -35,18 +35,17 @@ public function process(ContainerBuilder $container): void
35
35
$ receivers [$ tags [0 ]['alias ' ]] = true ;
36
36
}
37
37
38
- $ scheduleProviders = [];
38
+ $ scheduleProviderIds = [];
39
39
foreach ($ container ->findTaggedServiceIds ('scheduler.schedule_provider ' ) as $ serviceId => $ tags ) {
40
40
$ name = $ tags [0 ]['name ' ];
41
- $ scheduleProviders [$ name ] = $ container -> getDefinition ( $ serviceId) ;
41
+ $ scheduleProviderIds [$ name ] = $ serviceId ;
42
42
}
43
43
44
+ $ tasksPerSchedule = [];
44
45
foreach ($ container ->findTaggedServiceIds ('scheduler.task ' ) as $ serviceId => $ tags ) {
45
46
foreach ($ tags as $ tagAttributes ) {
46
47
$ serviceDefinition = $ container ->getDefinition ($ serviceId );
47
48
$ scheduleName = $ tagAttributes ['schedule ' ] ?? 'default ' ;
48
- $ scheduleProviders [$ scheduleName ] ??= $ container ->setDefinition ("scheduler.provider. $ scheduleName " , new Definition (Schedule::class))
49
- ->addTag ('scheduler.schedule_provider ' , ['name ' => $ scheduleName ]);
50
49
51
50
if ($ serviceDefinition ->hasTag ('console.command ' )) {
52
51
$ message = new Definition (RunCommandMessage::class, [$ serviceDefinition ->getClass ()::getDefaultName ().(empty ($ tagAttributes ['arguments ' ]) ? '' : " {$ tagAttributes ['arguments ' ]}" )]);
@@ -72,19 +71,33 @@ public function process(ContainerBuilder $container): void
72
71
],
73
72
}, fn ($ value ) => null !== $ value );
74
73
75
- $ taskDefinition = (new Definition (RecurringMessage::class))
74
+ $ tasksPerSchedule [ $ scheduleName ][] = $ taskDefinition = (new Definition (RecurringMessage::class))
76
75
->setFactory ([RecurringMessage::class, $ tagAttributes ['trigger ' ]])
77
76
->setArguments ($ taskArguments );
78
77
79
78
if ($ tagAttributes ['jitter ' ] ?? false ) {
80
79
$ taskDefinition ->addMethodCall ('withJitter ' , [$ tagAttributes ['jitter ' ]], true );
81
80
}
81
+ }
82
+ }
82
83
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 ;
84
95
}
96
+
97
+ $ container ->setDefinition ($ id , $ schedule );
85
98
}
86
99
87
- foreach (array_keys ($ scheduleProviders ) as $ name ) {
100
+ foreach (array_keys ($ scheduleProviderIds ) as $ name ) {
88
101
$ transportName = 'scheduler_ ' .$ name ;
89
102
90
103
// allows to override the default transport registration
0 commit comments