Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 82a2682

Browse files
committed
-
1 parent 17d9589 commit 82a2682

20 files changed

+70
-158
lines changed

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -715,7 +715,7 @@ public function load(array $configs, ContainerBuilder $container)
715715
$container->registerAttributeForAutoconfiguration(AsTargetedValueResolver::class, static function (ChildDefinition $definition, AsTargetedValueResolver $attribute): void {
716716
$definition->addTag('controller.targeted_value_resolver', $attribute->name ? ['name' => $attribute->name] : []);
717717
});
718-
$container->registerAttributeForAutoconfiguration(AsSchedule::class, static function (ChildDefinition $definition, AsSchedule $attribute, \ReflectionClass $reflector): void {
718+
$container->registerAttributeForAutoconfiguration(AsSchedule::class, static function (ChildDefinition $definition, AsSchedule $attribute): void {
719719
$definition->addTag('scheduler.schedule_provider', ['name' => $attribute->name]);
720720
});
721721

src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.php

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
use Symfony\Component\Messenger\EventListener\StopWorkerOnCustomStopExceptionListener;
2525
use Symfony\Component\Messenger\EventListener\StopWorkerOnRestartSignalListener;
2626
use Symfony\Component\Messenger\EventListener\StopWorkerOnSignalsListener;
27-
use Symfony\Component\Messenger\Handler\RedispatchMessageHandler;
2827
use Symfony\Component\Messenger\Middleware\AddBusNameStampMiddleware;
2928
use Symfony\Component\Messenger\Middleware\DispatchAfterCurrentBusMiddleware;
3029
use Symfony\Component\Messenger\Middleware\FailedMessageProcessingMiddleware;
@@ -219,11 +218,5 @@
219218
abstract_arg('message bus locator'),
220219
service('messenger.default_bus'),
221220
])
222-
223-
->set('messenger.redispatch_message_handler', RedispatchMessageHandler::class)
224-
->args([
225-
service('messenger.default_bus'),
226-
])
227-
->tag('messenger.message_handler')
228221
;
229222
};

src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Messenger/DummySchedule.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@
88
use Symfony\Component\Lock\Store\InMemoryStore;
99
use Symfony\Component\Scheduler\Attribute\AsSchedule;
1010
use Symfony\Component\Scheduler\Schedule;
11-
use Symfony\Component\Scheduler\ScheduleableInterface;
11+
use Symfony\Component\Scheduler\ScheduleProviderInterface;
1212

1313
#[AsSchedule('dummy')]
14-
class DummySchedule implements ScheduleableInterface
14+
class DummySchedule implements ScheduleProviderInterface
1515
{
1616
public static array $recurringMessages;
1717

src/Symfony/Bundle/FrameworkBundle/Tests/Functional/SchedulerTest.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,14 @@
1818
use Symfony\Component\HttpKernel\KernelInterface;
1919
use Symfony\Component\Scheduler\Messenger\SchedulerTransport;
2020
use Symfony\Component\Scheduler\RecurringMessage;
21-
use Symfony\Component\Scheduler\Trigger\PeriodicalTrigger;
2221

2322
class SchedulerTest extends AbstractWebTestCase
2423
{
2524
public function testScheduler()
2625
{
2726
$scheduledMessages = [
28-
new RecurringMessage($foo = new FooMessage(), PeriodicalTrigger::create(600, '2020-01-01T00:00:00Z')),
29-
new RecurringMessage($bar = new BarMessage(), PeriodicalTrigger::create(600, '2020-01-01T00:01:00Z')),
27+
RecurringMessage::every('5 minutes', $foo = new FooMessage()),
28+
RecurringMessage::every('5 minutes', $bar = new BarMessage()),
3029
];
3130
DummySchedule::$recurringMessages = $scheduledMessages;
3231

src/Symfony/Component/Messenger/CHANGELOG.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ CHANGELOG
1414
* Deprecate `StopWorkerOnSigtermSignalListener` in favor of
1515
`StopWorkerOnSignalsListener` and make it configurable with SIGINT and
1616
SIGTERM by default
17-
* Add `RedispatchMessage` and `RedispatchMessageHandler`
1817

1918
6.2
2019
---

src/Symfony/Component/Messenger/Handler/RedispatchMessageHandler.php

Lines changed: 0 additions & 28 deletions
This file was deleted.

src/Symfony/Component/Messenger/Message/RedispatchMessage.php

Lines changed: 0 additions & 25 deletions
This file was deleted.

src/Symfony/Component/Messenger/composer.json

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@
2121
},
2222
"require-dev": {
2323
"psr/cache": "^1.0|^2.0|^3.0",
24-
"symfony/cache": "^5.4|^6.0",
25-
"symfony/clock": "^6.2",
2624
"symfony/console": "^5.4|^6.0",
2725
"symfony/dependency-injection": "^5.4|^6.0",
2826
"symfony/event-dispatcher": "^5.4|^6.0",

src/Symfony/Component/Scheduler/Generator/Checkpoint.php

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
namespace Symfony\Component\Scheduler\Generator;
1313

1414
use Symfony\Component\Lock\LockInterface;
15-
use Symfony\Component\Lock\NoLock;
1615
use Symfony\Contracts\Cache\CacheInterface;
1716

1817
/**
@@ -26,14 +25,14 @@ final class Checkpoint implements CheckpointInterface
2625

2726
public function __construct(
2827
private readonly string $name,
29-
private readonly LockInterface $lock = new NoLock(),
28+
private readonly ?LockInterface $lock = null,
3029
private readonly ?CacheInterface $cache = null,
3130
) {
3231
}
3332

3433
public function acquire(\DateTimeImmutable $now): bool
3534
{
36-
if (!$this->lock->acquire()) {
35+
if ($this->lock && !$this->lock->acquire()) {
3736
// Reset local state if a `Lock` is acquired by another `Worker`.
3837
$this->reset = true;
3938

@@ -77,6 +76,10 @@ public function save(\DateTimeImmutable $time, int $index): void
7776
*/
7877
public function release(\DateTimeImmutable $now, ?\DateTimeImmutable $nextTime): void
7978
{
79+
if (!$this->lock) {
80+
return;
81+
}
82+
8083
if (!$nextTime) {
8184
$this->lock->release();
8285
} elseif ($remaining = $this->lock->getRemainingLifetime()) {

src/Symfony/Component/Scheduler/Generator/MessageGenerator.php

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
use Psr\Clock\ClockInterface;
1515
use Symfony\Component\Clock\Clock;
1616
use Symfony\Component\Scheduler\Schedule;
17-
use Symfony\Component\Scheduler\ScheduleableInterface;
17+
use Symfony\Component\Scheduler\ScheduleProviderInterface;
1818
use Symfony\Component\Scheduler\Trigger\TriggerInterface;
1919

2020
/**
@@ -25,24 +25,17 @@ final class MessageGenerator implements MessageGeneratorInterface
2525
private TriggerHeap $triggerHeap;
2626
private ?\DateTimeImmutable $waitUntil;
2727
private CheckpointInterface $checkpoint;
28-
private Schedule $schedule;
2928

3029
public function __construct(
31-
private readonly string $name,
32-
ScheduleableInterface $scheduleProvider,
33-
private readonly ClockInterface $clock = new Clock(),
30+
private Schedule $schedule,
31+
string|CheckpointInterface $checkpoint,
32+
private ClockInterface $clock = new Clock(),
3433
) {
3534
$this->waitUntil = new \DateTimeImmutable('@0');
36-
$this->schedule = $scheduleProvider->getSchedule();
37-
$this->checkpoint = new Checkpoint('scheduler_checkpoint_'.$name, $this->schedule->getLock(), $this->schedule->getState());
38-
}
39-
40-
public function withCheckpoint(CheckpointInterface $checkpoint): static
41-
{
42-
$generator = clone $this;
43-
$generator->checkpoint = $checkpoint;
44-
45-
return $generator;
35+
if (\is_string($checkpoint)) {
36+
$checkpoint = new Checkpoint('scheduler_checkpoint_'.$checkpoint, $this->schedule->getLock(), $this->schedule->getState());
37+
}
38+
$this->checkpoint = $checkpoint;
4639
}
4740

4841
public function getMessages(): \Generator

src/Symfony/Component/Scheduler/Messenger/SchedulerTransport.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
namespace Symfony\Component\Scheduler\Messenger;
1313

1414
use Symfony\Component\Messenger\Envelope;
15-
use Symfony\Component\Messenger\Message\RedispatchMessage;
1615
use Symfony\Component\Messenger\Transport\Receiver\MessageCountAwareInterface;
1716
use Symfony\Component\Messenger\Transport\TransportInterface;
1817
use Symfony\Component\Scheduler\Exception\LogicException;
@@ -36,7 +35,7 @@ public function getMessageCount(): int
3635
public function get(): iterable
3736
{
3837
foreach ($this->messageGenerator->getMessages() as $message) {
39-
yield new Envelope(new RedispatchMessage(Envelope::wrap($message, [new ScheduledStamp()])));
38+
yield Envelope::wrap($message, [new ScheduledStamp()]);
4039
}
4140
}
4241

src/Symfony/Component/Scheduler/Messenger/SchedulerTransportFactory.php

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@
1717
use Symfony\Component\Messenger\Transport\Serialization\SerializerInterface;
1818
use Symfony\Component\Messenger\Transport\TransportFactoryInterface;
1919
use Symfony\Component\Scheduler\Exception\InvalidArgumentException;
20+
use Symfony\Component\Scheduler\Generator\Checkpoint;
2021
use Symfony\Component\Scheduler\Generator\MessageGenerator;
22+
use Symfony\Component\Scheduler\Schedule;
2123

2224
/**
2325
* @experimental
@@ -39,20 +41,17 @@ public function createTransport(string $dsn, array $options, SerializerInterface
3941
throw new InvalidArgumentException(sprintf('The given Schedule DSN "%s" is invalid.', $dsn));
4042
}
4143
if (!$this->scheduleProviders->has($scheduleName)) {
42-
throw new InvalidArgumentException(sprintf('The schedule "not-exists" is not found.', $scheduleName));
44+
throw new InvalidArgumentException(sprintf('The schedule "%s" is not found.', $scheduleName));
4345
}
4446

45-
return new SchedulerTransport(
46-
new MessageGenerator($scheduleName, $this->scheduleProviders->get($scheduleName), $this->clock)
47-
);
48-
}
47+
/** @var Schedule $schedule */
48+
$schedule = $this->scheduleProviders->get($scheduleName)->getSchedule();
49+
$checkpoint = new Checkpoint('scheduler_checkpoint_'.$scheduleName, $schedule->getLock(), $schedule->getState());
4950

50-
public function supports(string $dsn, array $options): bool
51-
{
52-
return self::isSupported($dsn);
51+
return new SchedulerTransport(new MessageGenerator($schedule, $checkpoint, $this->clock));
5352
}
5453

55-
final public static function isSupported(string $dsn): bool
54+
public function supports(string $dsn, array $options): bool
5655
{
5756
return str_starts_with($dsn, 'schedule://');
5857
}

src/Symfony/Component/Scheduler/RecurringMessage.php

Lines changed: 19 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -11,64 +11,48 @@
1111

1212
namespace Symfony\Component\Scheduler;
1313

14-
use Symfony\Component\Messenger\Envelope;
15-
use Symfony\Component\Messenger\Stamp\TransportNamesStamp;
16-
use Symfony\Component\Scheduler\Exception\LogicException;
1714
use Symfony\Component\Scheduler\Trigger\CronExpressionTrigger;
1815
use Symfony\Component\Scheduler\Trigger\PeriodicalTrigger;
1916
use Symfony\Component\Scheduler\Trigger\TriggerInterface;
2017

2118
/**
2219
* @experimental
2320
*/
24-
final class RecurringMessage
21+
class RecurringMessage
2522
{
26-
public function __construct(
27-
private object $message,
28-
private TriggerInterface $trigger = new CronExpressionTrigger(),
23+
private function __construct(
24+
private readonly TriggerInterface $trigger,
25+
private readonly object $message,
2926
) {
3027
}
3128

32-
public function getMessage(): object
29+
/**
30+
* Uses a relative date format to define the frequency.
31+
*
32+
* @see https://php.net/datetime.formats.relative
33+
*/
34+
public static function every(string $frequency, object $message, \DateTimeImmutable $from = new \DateTimeImmutable(), ?\DateTimeImmutable $until = new \DateTimeImmutable('3000-01-01')): static
3335
{
34-
return $this->message;
36+
return new self(PeriodicalTrigger::create(\DateInterval::createFromDateString($frequency), $from, $until), $message);
3537
}
3638

37-
public function getTrigger(): TriggerInterface
39+
public static function cron(string $expression, object $message): static
3840
{
39-
return $this->trigger;
41+
return new self(CronExpressionTrigger::fromSpec($expression), $message);
4042
}
4143

42-
/**
43-
* @return $this
44-
*/
45-
public function transport(string $name, string ...$names): self
44+
public static function trigger(TriggerInterface $trigger, object $message): static
4645
{
47-
$this->message = Envelope::wrap($this->message, [new TransportNamesStamp([$name, ...$names])]);
48-
49-
return $this;
46+
return new self($trigger, $message);
5047
}
5148

52-
/**
53-
* @return $this
54-
*/
55-
public function trigger(TriggerInterface $trigger): self
49+
public function getMessage(): object
5650
{
57-
$this->trigger = $trigger;
58-
59-
return $this;
51+
return $this->message;
6052
}
6153

62-
/**
63-
* @return $this
64-
*/
65-
public function every(string $expression): self
54+
public function getTrigger(): TriggerInterface
6655
{
67-
$this->trigger = PeriodicalTrigger::create(
68-
\DateInterval::createFromDateString($expression),
69-
'now',
70-
);
71-
72-
return $this;
56+
return $this->trigger;
7357
}
7458
}

src/Symfony/Component/Scheduler/Schedule.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
/**
1919
* @experimental
2020
*/
21-
final class Schedule implements ScheduleableInterface
21+
final class Schedule implements ScheduleProviderInterface
2222
{
2323
/** @var array<RecurringMessage> */
2424
private array $messages = [];
@@ -28,7 +28,7 @@ final class Schedule implements ScheduleableInterface
2828
/**
2929
* @return $this
3030
*/
31-
public function add(RecurringMessage $message, RecurringMessage ...$messages): self
31+
public function add(RecurringMessage $message, RecurringMessage ...$messages): static
3232
{
3333
$this->messages[] = $message;
3434
$this->messages = array_merge($this->messages, $messages);
@@ -39,7 +39,7 @@ public function add(RecurringMessage $message, RecurringMessage ...$messages): s
3939
/**
4040
* @return $this
4141
*/
42-
public function lock(LockInterface $lock): self
42+
public function lock(LockInterface $lock): static
4343
{
4444
$this->lock = $lock;
4545

@@ -54,7 +54,7 @@ public function getLock(): LockInterface
5454
/**
5555
* @return $this
5656
*/
57-
public function stateful(CacheInterface $state): self
57+
public function stateful(CacheInterface $state): static
5858
{
5959
$this->state = $state;
6060

@@ -77,7 +77,7 @@ public function getRecurringMessages(): array
7777
/**
7878
* @return $this
7979
*/
80-
public function getSchedule(): self
80+
public function getSchedule(): static
8181
{
8282
return $this;
8383
}

0 commit comments

Comments
 (0)