Message Queue

In Shopware 6 werden eine Vielzahl von Aufgaben asynchron abgearbeitet, das bedeutet, die Aufgaben werden in Nachrichten (Message) in einer Warteschlange (Queue) nacheinander abgearbeitet und nicht zum Zeitpunkt der Ausführung. So können Aufgaben unabhängig von Zeitüberschreitungen oder Systemabstürzen bearbeitet werden. Mögliche Aufgaben sind das Versenden von Mails, die Indexierung von Produkten oder die Generierung der Sitemap.

Scheduled Tasks

Immer wiederkehrende Aufgaben werden über Scheduled Tasks (geplante Aufgaben) gelöst. Mit Scheduled Tasks werden in festen Intervallen bestimmte Aufgaben der Message Queue hinzugefügt, die dann ebenfalls asynchron abgearbeitet werden. Zum Beispiel fallen hierunter die Generierung eines Exportes für Vergleichsportale oder die Prüfung, ob neue Updates zur Verfügung stehen.

Standardmäßig vorhandene Scheduled Task

Scheduled TaskRun Intervall (Sekunden)Erläuterung
log_entry.cleanup86400Leert die Tabelle "log_entry"
shopware.invalidate_cache20Invalidierung des Caches
app_update86400Prüft, ob es für die installierten Erweiterungen ein Update gibt
app_delete86400Entfernt eine Erweiterung und die zugehörigen Plugin-Daten manuell aus der Shopware-Datenbank und den Server-Dateien
version.cleanup86400Löscht veraltete Version-ID aus der Datenbank
webhook_event_log.cleanup86400Löscht Webhook-Ereignisprotokolle, die älter als die eingestellte Zeit sind
sales_channel_context.cleanup86400Leert die Tabelle "sales_channel_context"
product_keyword_dictionary.cleanup604800Leert die Tabelle "product_keyword_dictionary"
product_download.media.cleanup2628000Löscht nicht zugewiesene Bilder
delete_newsletter_recipient_task86400Löscht Newsletter-Empfänger mit dem Status "Warten auf Löschung"
product_stream.mapping.update86400Updatet das Mapping 
product_export_generate_task60Triggert den Produkt-Export
import_export_file.cleanup86400Leert die Tabelle "import_export_file"
shopware.sitemap_generate86400Generiert die Sitemap
cart.cleanup86400Löscht alle Warenkörbe, die älter als 120 (shopware.cart.expire_days) Tage sind
shopware.elasticsearch.create.alias300Triggert die Erstellung von Elastic Search Alias, dies wird nur bei Bedarf ausgeführt

Einige Tasks wie shopware.elasticsearch.create.alias und shopware.invalidate_cache werden nur bei Bedarf ausgeführt. Die Elasticsearch-Aufgabe wird nur ausgeführt, wenn ein Elasticsearch-Server konfiguriert und aktiviert ist.

Admin Worker

In einer standardmäßigen Installation von Shopware werden Aufgaben der Message Queue in der Datenbank gespeichert und über den Browser bearbeitet, sofern Du in der Administration angemeldet bist. Dies ist eine einfache und schnelle Methode, wird aber nicht für den Einsatz in Produktionssystemen empfohlen. 

Die Funktionsweise des Admin Worker erfordert, dass die Administration über einen längeren Zeitraum geöffnet ist, andernfalls werden keine Aufgaben abgearbeitet.  Wenn eine große Anzahl von Benutzern an der Administration angemeldet sind, kann dies zu einer hohen CPU-Last führen. In solchen Fällen ist es ratsam, den Admin Worker zu deaktivieren und die Prozesse serverseitig über die CLI laufen auszuführen. Auf diese Weise werden Aufgaben auch dann abgearbeitet, wenn niemand in der Administration angemeldet ist und eine hohe CPU-Last durch mehrere Benutzer wird ebenfalls vermieden. Diese Vorgehensweise ist besonders bei größeren Shops sinnvoll.

CLI-Worker

Der CLI-Worker ist ein Worker, der direkt auf dem Server eingerichtet werden kann. Er wird für die Ausführung von Hintergrund-Jobs verwendet, dabei steht "CLI" für  "Command Line Interface", was bedeutet, dass dieser Aufgaben über die Befehlszeile ausführen kann. Der CLI-Worker kümmert sich um Aufgaben, wie die Ausführung von Indexierungen und anderen Prozessen, die nicht direkt im Frontend des Shopware-Admins stattfinden müssen. Dabei können die Befehle ebenfalls als Cronjob oder als Service eingerichtet werden, sodass diese regelmäßig im Hintergrund durchgeführt werden können.

Mehr Informationen findest Du in unsere Developer-Dokumentation.

Admin Worker deaktivieren & CLI-Worker einrichten

Wie erläutert, wird der Einsatz des Admin Worker nicht für Produktivsysteme empfohlen, der folgende Abschnitt erläutert, wie der Admin Worker deaktiviert werden kann und die Message Queue / Scheduled Tasks serverseitig ausgeführt werden.

Die folgenden Einstellungen erfolgen direkt auf dem Server. Da die Möglichkeiten der Serverkonfiguration vom Hoster abhängt, erläutern wir dies hier allgemein. Bei Fragen zur Bedienung der Serverkonfiguration sollte der Support Deines Hosters weiterhelfen können.

Schritt 1: Konfiguration anpassen

Um den Admin-Worker zu deaktivieren, muss die Änderung in der Datei z-shopware.yaml vorgenommen werden, damit die Änderung auch Update sicher ist. Du findest diese in Deiner Shopware-Installation unter config/packages/. Sollte die Datei fehlen, so erstelle diese bitte.

Deaktiviere den Admin-Worker indem Du den Wert "false" einträgst und speichere die Datei ab. Deine Datei sollte nun folgendermaßen aussehen: 

# config/packages/shopware.yaml
shopware:
    admin_worker:
        enable_admin_worker: false

Schritt 2: CLI-Befehle ausführen

Damit die Message Queue und die Scheduled Tasks nun ausgeführt werden, müssen die Prozesse über die CLI gestartet werden.

Message Queue:

bin/console messenger:consume failed async --time-limit=60

Wichtig ist, dass sich der Befehl ab der Shopware Version 6.5 geändert hat. Der alte CLI-Command mit dem Wert "default" wird fehlschlagen.


Scheduled Tasks:

bin/console scheduled-task:run --time-limit=60

Wir empfehlen bei den oben stehenden Befehlen den Parameter time-limit=60, sodass der Befehl für maximal 60 Sekunden ausgeführt wird. Alternativ /zusätzlich kannst Du anstatt eines Zeitlimits auch ein Speicherlimit definieren, dies ist mit dem Parameter --memory-limit=512M möglich. Mehr Informationen findest Du in unserer Developer Doku.

Wichtig ist bei diesem Vorgang, dass die Befehle regelmäßig ausgeführt werden, damit die Message Queue kontinuierlich abgearbeitet wird. Dies kann zum Beispiel durch das Anlegen eines Cronjobs oder eines Services auf dem Server erreicht werden. Wende Dich hierzu an Deinen Hoster.

Schritt 3: Ausführungsart wählen (Cronjob oder as a Service)

Im nächsten Schritt solltest Du Dich entscheiden, wie Du die Message Queue abarbeiten möchtest. Du kannst die oben genannten Befehle als Cronjob einrichten oder den CLI-Worker als Service einrichten. 

Mehr Informationen dazu erfährst Du hier.

Weitere Informationen von einigen Hostern

Einige Hoster stellen in Ihren Wissensbereichen Artikel zur Verfügung, in denen beschrieben wird, wie die Einrichtung dort zu erfolgen hat.

Profihost

Bei Profihost findest Du weitere Informationen zur Einrichtung unter https://wissen.profihost.com/wissen/artikel/shopware-6-worker-im-hintergrund-laufen-lassen/

Hetzner

Hetzner stellt die Informationen bereit unter
https://community.hetzner.com/tutorials/install-shopware-6#step-6---configuring-background-queue-worker

Creoline

Creoline stellt die Informationen bereit unter
https://help.creoline.com/doc/shopware-6-background-queue-worker-einrichten-XLBEPcGmlt

Timme Hosting

Timme Hosting stellt die Informationen bereit unter
https://timmehosting.de/shopware-6-admin-worker-deaktivieren

War dieser Artikel hilfreich?