Skip to the content
Documentation
Help Start
Reading in:
  • German: 9,090 of 9,090 pages
About the help in other languages
All help pages

Warteschlangen und Hintergrundjobs

Hintergrundarbeit in Exponential für Entwickler, die Symfony Messenger, Laravel-Queues, Celery, Sidekiq oder @Async von Spring gewohnt sind - die Job-Warteschlange expqueue mit Handlern, Wiederholungen…

Download as PDF

Address: https://doc.exponential.earth/exphelp/viewer/help/web-framework-developers/queues-and-background-jobs.md

On this page

This page is a translation. Read the English original

Warteschlangen und Hintergrundjobs

Diese Seite richtet sich an Entwickler, die Nachrichten oder Jobs an eine Warteschlange übergeben (Symfony Messenger, Laravel-Queues, Celery, Sidekiq, Active Job, Spring @Async). Die Job-Warteschlange von Exponential ist die Erweiterung expqueue: datenbankgestützt, mit Handlern, Wiederholungen, Prioritäten und Workern auf der Kommandozeile. Zwei weitere Mechanismen decken Arbeit des Kernels ab: Inhaltsjobs für sehr große Inhaltsoperationen und auf Cron verschobene Workflow-Ereignisse (Hintergrundarbeit: Warteschlangen, Cronjobs und Inhaltsjobs).

Inhalt

  1. Welcher Mechanismus
  2. expqueue in fünf Schritten
  3. Ein Handler
  4. Inhaltsjobs
  5. Regeln für Jobs
  6. Im Vergleich mit anderen Frameworks

Welcher Mechanismus

Die ArbeitOrt
Nach jedem Veröffentlichen einen externen Dienst aufrufenein Workflow-Ereignis oder Listener stellt einen expqueue-Job in die Warteschlange
Morgen um 9 Uhr eine Erinnerungs-E-Mail sendenein expqueue-Job mit not_before
Stündlich einen Feed importierenein Cronjob-Teil (Geplante Aufgaben)
Das Veröffentlichen anhalten, bis jemand freigibtein auf Cron verschobenes Workflow-Ereignis (Workflows)
Einen Teilbaum mit 50 000 Knoten entfernen oder verschiebenein Inhaltsjob

expqueue in fünf Schritten

Aus Warteschlangen mit expqueue:

  1. Aktivieren Sie die Erweiterung: [ExtensionSettings] ActiveExtensions[]=expqueue in settings/override/site.ini.append.php.
  2. Legen Sie ihre Tabellen an (idempotent): ./console ext:expqueue:install-schema.
  3. Erzeugen Sie die Autoloads neu und deployen Sie.
  4. Starten Sie jede Minute einen Worker per Cron (php runcronjobs.php -q expqueue) oder betreiben Sie ihn als systemd-Dienst (./console ext:expqueue:service install) für kürzere Wartezeiten.
  5. Prüfen Sie: ./console ext:expqueue:enqueue expqueue.noop, ./console ext:expqueue:work --once, ./console ext:expqueue:status.

Aus beliebigem Code in die Warteschlange stellen:

$job = expQueue::enqueue( 'expdemo.archive', array( 'object_id' => $objectID ), array(
    'idempotency_key' => "archive:$objectID:$version",
    'priority' => 50 ) );

Zu den Optionen gehören class, priority, group, idempotency_key, resource (ein Nebenläufigkeitsschlüssel), not_before, max_attempts, timeout, depends_on und user_id. Die Nutzdaten werden als JSON gespeichert und in der Administrationsoberfläche angezeigt: Legen Sie niemals ein Geheimnis darin ab.

Ein Handler

# extension/expdemo/settings/expqueue.ini.append.php
[JobType_expdemo.archive]
Handler=expDemoArchiveHandler
MaxAttempts=4
Timeout=300
Description=Sends one published object to the archive
class expDemoArchiveHandler extends expQueueHandlerBase
{
    public function run( expQueueJob $job, expQueueContext $context )
    {
        $payload = $context->payload();
        $object = eZContentObject::fetch( (int)$payload['object_id'] );
        if ( !$object )
            return expQueueResult::fail( 'The object is gone' );
        expDemoArchiveClient::send( $object );
        return array( 'sent' => true );
    }
}

run() gibt nichts oder ein Array zurück (erledigt) oder ein expQueueResult: done(), retry( $message, $retryAfter ), fail(), defer(), hold(), cancelled(); andere Exceptions gelten als wiederholbar. Setup > Job queue zeigt das Dashboard und lässt Administratoren Jobs abbrechen, wiederholen und pausieren; die Richtlinien sind expqueue/view und expqueue/manage (expqueue).

Inhaltsjobs

Das Entfernen, Kopieren, Verschieben, Verbergen oder Einblenden großer Teilbäume, das Ändern von Sektionen oder Zuständen sowie das Hinzufügen oder Entfernen von Platzierungen kann als Inhaltsjob in Stapeln laufen, jeder Stapel in einer eigenen Transaktion, gestartet aus der Administrationsoberfläche oder von der Kommandozeile und mit Fortschrittsanzeige verfolgbar (Inhaltsjobs, Inhaltsjobs für Anwendungen).

Regeln für Jobs

  • Idempotent: Ein Job kann nach einem Absturz oder einer Wiederholung erneut laufen.
  • Keine Datenbanktransaktion um einen langsamen Aufruf herum.
  • Ein Job läuft als der Benutzer, der ihn eingereiht hat; prüfen Sie Berechtigungen als dieser Benutzer.
  • Worker laufen auf der Kommandozeile, niemals innerhalb eines Web-Requests.

Im Vergleich mit anderen Frameworks

FrameworkKonzeptExponential
Symfony MessengerNachrichten, Handler, TransportsJobtypen, Handler, ein Datenbank-Transport
LaravelJobs, dispatch(), HorizonexpQueue::enqueue(), Setup > Job queue
Celery, SidekiqBroker (Redis, RabbitMQ), Workerdie Datenbank; Worker per Cron oder systemd
Spring@Async, Task Executorskeine prozessinterne Asynchronität; stellen Sie die Arbeit in die Warteschlange

Es muss kein Broker betrieben werden: Die Warteschlange liegt in der Datenbank der Installation. Das hält Installationen einfach, kostet aber Durchsatz im Vergleich zu einem dedizierten Broker.

Verwandte Seiten

Werden Sie Exponential-Partner

Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.

Something wrong on this page? Report an error

Documentation license

This documentation is free documentation, licensed under the GNU Free Documentation License 1.3 or later.

Exponential Copyright © 1998-2026 Exponential Foundation and 7x