Shopware 6 Background Queue Worker einrichten

Shopware 6 verwendet für die Verarbeitung von Hintergrundaufgaben sowie für die Verarbeitung von wiederkehrenden Aufgaben sogenannte Message Queue Worker. In der Standard-Konfiguration werden diese über den angemeldeten Administrator im Browser ausgeführt. Sobald mehr als ein Administrator angemeldet ist, werden diese Message Queue Worker mehrfach ausgeführt und es kann zu einer sehr hohen CPU Last sowie zu Problemen bei der Ausführung von PHP FPM kommen.

Um dieses Problem dauerhaft zu lösen, bietet Shopware 6 die Möglichkeit die Ausführung dieser Message Queue Worker in den Hintergrund zu verlagern, genauer gesagt als CLI Command.


Deaktivierung der Frontend Message Queue Worker

Um die Shopware 6 Message Queue Worker für die angemeldeten Administratoren zu deaktivieren muss eine shopware.yaml Config Datei in dem folgendem Shopware Verzeichnis angelegt werden:

/config/packages/shopware.yaml

Tipp: Bei unseren Managed Shopware Servern befindet sich das korrekte Document-Root Verzeichnis unter dem absoluten Pfad: /var/www/vhosts/meine-shop-domain.de/httpdocs/

# /var/www/vhosts/meine-shop-domain.de/httpdocs/config/packages/shopware.yaml

shopware:
    admin_worker:
        enable_admin_worker: false

Nachdem die Config-Datei erstellt wurde, muss der Shopware Cache geleert werden, damit die neue Konfigurationsdatei aktiviert wird:

bin/console cache:clear

Bei unseren Managed Shopware Servern stehen verschiedene PHP-Binaries für die Ausführung der CLI Konsole zur Verfügung. Um den Cache mit der PHP 7.4 CLI zu leeren muss folgendes Command ausgeführt werden:

/opt/plesk/php/7.4/bin/php /var/www/vhosts/meine-shop-domain.de/httpdocs/bin/console cache:clear

Einrichtung der Message Queue Worker als systemd Service

Um eine dauerhafte Ausführung der Message Queue Worker zu gewährleisten, empfehlen wir die Einrichtung als systemd Service. Hierzu müssen zwei Service Dateien angelegt werden:

touch /etc/systemd/system/shopware_consumer.service

touch /etc/systemd/system/shopware_scheduled_tasks.service

Anschließend wird der Shopware Message Queue Consumer wie folgt definiert:

# /etc/systemd/system/shopware_consumer.service

[Unit]
Description=Shopware Message Queue Consumer
After=mysql.service

[Service]
Type=simple
User=ssh_example_user
Restart=always
ExecStart=/opt/plesk/php/7.4/bin/php /var/www/vhosts/meine-shop-domain.de/httpdocs/bin/console messenger:consume --time-limit=120 --memory-limit=512M

Wichtig: Achten Sie auf korrekte Angaben von Verzeichnissen und Usern. In diesem Beispiel befindet sich die Installation in dem Verzeichnis /var/www/vhosts/meine-shop-domain.de/. Dieses Verzeichnis dient nur als Beispiel und muss auf den korrekten Pfad Ihrer Installation angepasst werden.

Neben dem Consumer Service wird zusätzlich noch der Service für die wiederkehrenden Aufgaben benötigt:

# /etc/systemd/system/shopware_scheduled_tasks.service

[Unit]
Description=Shopware Scheduled Tasks Runner
After=mysql.service

[Service]
Type=simple
User=ssh_example_user
Restart=always
ExecStart=/opt/plesk/php/7.4/bin/php /var/www/vhosts/meine-shop-domain.de/httpdocs/bin/console scheduled-task:run --time-limit=120 --memory-limit=512M

Wichtig: Auch bei dem Scheduled Tasks Service muss das korrekte Verzeichnis und der richtige User für Ihre Shopware 6 Installation angegeben werden.

Nachdem die beiden Services eingerichtet wurden, müssen diese nur noch gestartet werden:

systemctl start shopware_consumer
systemctl start shopware_scheduled_tasks

systemctl enable shopware_consumer
systemctl enable shopware_scheduled_tasks