Skip to content

Commit ee83bc7

Browse files
upyxfabpot
authored andcommitted
Add the Scheduler component
1 parent 5e2c0b8 commit ee83bc7

File tree

16 files changed

+267
-6
lines changed

16 files changed

+267
-6
lines changed

DependencyInjection/Compiler/UnusedTagsPass.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ class UnusedTagsPass implements CompilerPassInterface
8080
'routing.expression_language_provider',
8181
'routing.loader',
8282
'routing.route_loader',
83+
'scheduler.schedule_config_locator',
8384
'security.authenticator.login_linker',
8485
'security.expression_language_provider',
8586
'security.remember_me_aware',

DependencyInjection/FrameworkExtension.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,8 @@
215215
use Symfony\Component\RemoteEvent\Attribute\AsRemoteEventConsumer;
216216
use Symfony\Component\RemoteEvent\RemoteEvent;
217217
use Symfony\Component\Routing\Loader\Psr4DirectoryLoader;
218+
use Symfony\Component\Scheduler\Locator\ScheduleConfigLocatorInterface;
219+
use Symfony\Component\Scheduler\Messenger\ScheduleTransportFactory;
218220
use Symfony\Component\Security\Core\AuthenticationEvents;
219221
use Symfony\Component\Security\Core\Exception\AuthenticationException;
220222
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
@@ -673,6 +675,8 @@ public function load(array $configs, ContainerBuilder $container)
673675
->addTag('messenger.message_handler');
674676
$container->registerForAutoconfiguration(TransportFactoryInterface::class)
675677
->addTag('messenger.transport_factory');
678+
$container->registerForAutoconfiguration(ScheduleConfigLocatorInterface::class)
679+
->addTag('scheduler.schedule_config_locator');
676680
$container->registerForAutoconfiguration(MimeTypeGuesserInterface::class)
677681
->addTag('mime.mime_type_guesser');
678682
$container->registerForAutoconfiguration(LoggerAwareInterface::class)
@@ -2027,6 +2031,10 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
20272031
$container->getDefinition('messenger.transport.beanstalkd.factory')->addTag('messenger.transport_factory');
20282032
}
20292033

2034+
if (ContainerBuilder::willBeAvailable('symfony/scheduler', ScheduleTransportFactory::class, ['symfony/framework-bundle', 'symfony/messenger'])) {
2035+
$loader->load('scheduler.php');
2036+
}
2037+
20302038
if (null === $config['default_bus'] && 1 === \count($config['buses'])) {
20312039
$config['default_bus'] = key($config['buses']);
20322040
}
@@ -2083,6 +2091,7 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
20832091
$container->removeDefinition('messenger.transport.redis.factory');
20842092
$container->removeDefinition('messenger.transport.sqs.factory');
20852093
$container->removeDefinition('messenger.transport.beanstalkd.factory');
2094+
$container->removeDefinition('scheduler.messenger_transport_factory');
20862095
$container->removeAlias(SerializerInterface::class);
20872096
} else {
20882097
$container->getDefinition('messenger.transport.symfony_serializer')

FrameworkBundle.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
use Symfony\Component\Mime\DependencyInjection\AddMimeTypeGuesserPass;
6161
use Symfony\Component\PropertyInfo\DependencyInjection\PropertyInfoPass;
6262
use Symfony\Component\Routing\DependencyInjection\RoutingResolverPass;
63+
use Symfony\Component\Scheduler\DependencyInjection\SchedulerPass;
6364
use Symfony\Component\Serializer\DependencyInjection\SerializerPass;
6465
use Symfony\Component\Translation\DependencyInjection\TranslationDumperPass;
6566
use Symfony\Component\Translation\DependencyInjection\TranslationExtractorPass;
@@ -166,6 +167,7 @@ public function build(ContainerBuilder $container)
166167
$container->addCompilerPass(new TestServiceContainerRealRefPass(), PassConfig::TYPE_AFTER_REMOVING);
167168
$this->addCompilerPassIfExists($container, AddMimeTypeGuesserPass::class);
168169
$this->addCompilerPassIfExists($container, MessengerPass::class);
170+
$this->addCompilerPassIfExists($container, SchedulerPass::class);
169171
$this->addCompilerPassIfExists($container, HttpClientPass::class);
170172
$this->addCompilerPassIfExists($container, AddAutoMappingConfigurationPass::class);
171173
$container->addCompilerPass(new RegisterReverseContainerPass(true));

Resources/config/scheduler.php

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <[email protected]>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
13+
14+
use Symfony\Component\DependencyInjection\ServiceLocator;
15+
use Symfony\Component\Scheduler\Locator\ChainScheduleConfigLocator;
16+
use Symfony\Component\Scheduler\Messenger\ScheduleTransportFactory;
17+
use Symfony\Component\Scheduler\State\StateFactory;
18+
19+
return static function (ContainerConfigurator $container) {
20+
$container->services()
21+
->set('scheduler.messenger_transport_factory', ScheduleTransportFactory::class)
22+
->args([
23+
service('clock'),
24+
service('scheduler.schedule_config_locator'),
25+
service('scheduler.state_factory'),
26+
])
27+
->tag('messenger.transport_factory')
28+
29+
->set('scheduler.schedule_config_locator', ChainScheduleConfigLocator::class)
30+
->args([
31+
tagged_iterator('scheduler.schedule_config_locator'),
32+
])
33+
34+
->set('scheduler.state_factory', StateFactory::class)
35+
->args([
36+
service('scheduler.lock_locator'),
37+
service('scheduler.cache_locator'),
38+
])
39+
40+
->set('scheduler.lock_locator', ServiceLocator::class)
41+
->args([
42+
[],
43+
])
44+
->tag('container.service_locator')
45+
46+
->set('scheduler.cache_locator', ServiceLocator::class)
47+
->args([
48+
[],
49+
])
50+
->tag('container.service_locator')
51+
;
52+
};
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?php
2+
3+
$container->loadFromExtension('framework', [
4+
'http_method_override' => false,
5+
'messenger' => [
6+
'transports' => [
7+
'schedule' => [
8+
'dsn' => 'schedule://default',
9+
'options' => [
10+
'cache' => 'array',
11+
]
12+
],
13+
],
14+
],
15+
]);

Tests/DependencyInjection/Fixtures/php/messenger_transports.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
'failed' => 'in-memory:///',
2626
'redis' => 'redis://127.0.0.1:6379/messages',
2727
'beanstalkd' => 'beanstalkd://127.0.0.1:11300',
28+
'schedule' => 'schedule://default',
2829
],
2930
],
3031
]);
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<container xmlns="http://symfony.com/schema/dic/services"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xmlns:framework="http://symfony.com/schema/dic/symfony"
5+
xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd
6+
http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd">
7+
8+
<framework:config http-method-override="false">
9+
<framework:messenger>
10+
<framework:transport name="schedule" dsn="schedule://default" />
11+
</framework:messenger>
12+
</framework:config>
13+
</container>

Tests/DependencyInjection/Fixtures/xml/messenger_transports.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
<framework:transport name="failed" dsn="in-memory:///" />
2222
<framework:transport name="redis" dsn="redis://127.0.0.1:6379/messages" />
2323
<framework:transport name="beanstalkd" dsn="beanstalkd://127.0.0.1:11300" />
24+
<framework:transport name="schedule" dsn="schedule://default" />
2425
</framework:messenger>
2526
</framework:config>
2627
</container>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
framework:
2+
http_method_override: false
3+
messenger:
4+
transports:
5+
schedule: 'schedule://default'

Tests/DependencyInjection/Fixtures/yml/messenger_transports.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,4 @@ framework:
2222
failed: 'in-memory:///'
2323
redis: 'redis://127.0.0.1:6379/messages'
2424
beanstalkd: 'beanstalkd://127.0.0.1:11300'
25+
schedule: 'schedule://default'

0 commit comments

Comments
 (0)