PHPackages                             netlogix/jobqueue-scheduled - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. netlogix/jobqueue-scheduled

ActiveNeos-package

netlogix/jobqueue-scheduled
===========================

Allows for scheduled jobs and deduplicates

5.2.1(1mo ago)0234.0k↑79.7%[2 PRs](https://github.com/netlogix/Netlogix.JobQueue.Scheduled/pulls)MITPHPPHP ~8.2 || ~8.3CI passing

Since May 12Pushed 2mo ago3 watchersCompare

[ Source](https://github.com/netlogix/Netlogix.JobQueue.Scheduled)[ Packagist](https://packagist.org/packages/netlogix/jobqueue-scheduled)[ RSS](/packages/netlogix-jobqueue-scheduled/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (10)Dependencies (14)Versions (38)Used By (0)

Netlogix.JobQueue.Scheduled
===========================

[](#netlogixjobqueuescheduled)

This package provides a PDO based scheduler for JobQueue jobs.

There are two main goals:

1. Schedule a Flowpack JobQueue job for later execution.
2. Have a single job only scheduled once.

Installation
------------

[](#installation)

```
composer require netlogix/jobqueue-scheduled
```

Schedule jobs
-------------

[](#schedule-jobs)

The first goal of this package is to have a way to put any kind of JobQueue job on hold and mark it for later execution. In contrast to e.g. "Defer" annotated methods or default behavior of JobQueue jobs, there is a time aspect to it. Scheduled jobs are not executed immediately but at a time specified while scheduling.

Regular job queue jobs need to be serializable. That's just an implementation detail of how Flowpack FakeQueue and t3n RabbitQueue work.

To schedule an existing Flowpack job, just wrap it in a Scheduled Job and pass it to the scheduler.

```
use Netlogix\JobQueue\Scheduled\Domain\Model\ScheduledJob;
use Netlogix\JobQueue\Scheduled\Domain\Scheduler;
use Flowpack\JobQueue\Common\Job\JobInterface;

assert($scheduler instanceof Scheduler);
assert($jobqueueJob instanceof JobInterface);

$dueDate = new \DateTimeImmutable('now + 1 minute');
$queueName = 'default';

$schedulerJob = new ScheduledJob(
    $jobqueueJob,
    $queueName,
    $dueDate
);
$scheduler->schedule($schedulerJob);
```

Jobs with unique identifiers
----------------------------

[](#jobs-with-unique-identifiers)

The second goal of this package is to avoid duplicate schedules.

Certain jobs don't calculate a specific computation but just "run to the end". An example of those are the catchup jobs of the Neos.EventSourcing package. Queuing triggers the catchup call of some event listeners.

Queuing another catchup job while the first one is running is good because there might be additonal changes.

Queueing another catchup job while the previous one has is not even started is unnecessary because the first one will already catch up to the end.

```
use Netlogix\JobQueue\Scheduled\Domain\Model\ScheduledJob;
use Netlogix\JobQueue\Scheduled\Domain\Scheduler;
use Flowpack\JobQueue\Common\Job\JobInterface;

assert($scheduler instanceof Scheduler);
assert($jobqueueJob instanceof JobInterface);

$dueDate = new \DateTimeImmutable('now + 1 minute');
$queueName = 'default';

$jobIdentifier = 'event-sourcing-catchup-' . $eventListenerName;

$schedulerJob = new ScheduledJob(
    $jobqueueJob,
    $queueName,
    $dueDate,
    $jobIdentifier
);
$scheduler->schedule($schedulerJob);
```

The "schedule" will only schedule a new job if the specified identifier is not already scheduled. If there are conflicts between the existing due date and the one provided by the new job the earliest value is taken.

Queue scheduled jobs
--------------------

[](#queue-scheduled-jobs)

A scheduled job lives in the database and is not processed any further until queueing happens.

This is currently done via cronjobs.

```
* * * * *   ./flow scheduler:queueduejobs
```

The internal scheduling mechanism will make sure only those jobs are passed from the scheduler to the job queue which are "due" according to their individual due date values.

Automatically schedule jobs
---------------------------

[](#automatically-schedule-jobs)

Some jobs originate from foreign applications. An example would be one flow app putting a job into a RabbitMQ and another flow app consuming it.

Previously the only implementation would be a regular jobqueue worker, which neither provides a way to delay execution nor a deduplication feature.

Now every job can simply implement the `ScheduledJobInterface`. When `execute()`is triggered, it's now moved over to a scheduled jobs queue.

The job itself must provide all necessary details about how to schedule its execution.

```
abstract class AutoScheduledJob implements ScheduledJobInterface, JobInterface {
    public function getSchedulingInformation(): ?SchedulingInformation
    {
        return SchedulingInformation(
            '97528fab-c199-4f87-b1a5-4074f1e98749',
            'default-group',
            new DateTimeImmutable('now')
        );
    }
}
```

###  Health Score

57

—

FairBetter than 98% of packages

Maintenance87

Actively maintained with recent releases

Popularity34

Limited adoption so far

Community15

Small or concentrated contributor base

Maturity75

Established project with proven stability

 Bus Factor2

2 contributors hold 50%+ of commits

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~54 days

Recently: every ~17 days

Total

27

Last Release

57d ago

Major Versions

1.3.0 → 2.0.02024-08-21

2.2.1 → 3.0.02024-11-18

3.3.2 → 4.0.02026-01-12

4.0.0 → 5.0.02026-01-14

PHP version history (2 changes)1.2.0PHP ^7.4 || ^8.0 || ^8.1

2.2.0PHP ~8.2 || ~8.3

### Community

Maintainers

![](https://www.gravatar.com/avatar/667b5107f4c2ea180baa00166c2ee3f2a1b412ce22768d6e81bb09323d1c7fe0?d=identicon)[netlogix](/maintainers/netlogix)

![](https://www.gravatar.com/avatar/124704a0d41c6364ac5773df0c9bedc3a85f902f0826df5f12ff2a4b2a06d520?d=identicon)[paxuclus](/maintainers/paxuclus)

---

Top Contributors

[![stephanschuler](https://avatars.githubusercontent.com/u/1595908?v=4)](https://github.com/stephanschuler "stephanschuler (54 commits)")[![paxuclus](https://avatars.githubusercontent.com/u/15905038?v=4)](https://github.com/paxuclus "paxuclus (41 commits)")[![HenrikVogel](https://avatars.githubusercontent.com/u/183506026?v=4)](https://github.com/HenrikVogel "HenrikVogel (27 commits)")[![tweis](https://avatars.githubusercontent.com/u/63323?v=4)](https://github.com/tweis "tweis (5 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (3 commits)")[![saschanowak](https://avatars.githubusercontent.com/u/1643495?v=4)](https://github.com/saschanowak "saschanowak (1 commits)")

---

Tags

flowscheduler

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/netlogix-jobqueue-scheduled/health.svg)

```
[![Health](https://phpackages.com/badges/netlogix-jobqueue-scheduled/health.svg)](https://phpackages.com/packages/netlogix-jobqueue-scheduled)
```

###  Alternatives

[sylius/sylius

E-Commerce platform for PHP, based on Symfony framework.

8.4k5.6M651](/packages/sylius-sylius)[scienta/doctrine-json-functions

A set of extensions to Doctrine that add support for json query functions.

58723.9M36](/packages/scienta-doctrine-json-functions)[sulu/sulu

Core framework that implements the functionality of the Sulu content management system

1.3k1.3M152](/packages/sulu-sulu)[damienharper/auditor-bundle

Integrate auditor library in your Symfony projects.

4542.8M](/packages/damienharper-auditor-bundle)[sonata-project/entity-audit-bundle

Audit for Doctrine Entities

644989.8k1](/packages/sonata-project-entity-audit-bundle)[neos/flow

Flow Application Framework

862.0M451](/packages/neos-flow)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
