SENSUS MEDIA Logo
uptain · Dokumentation

Message-Queue-Worker einrichten

Admin-Worker abschalten und einen dauerhaft laufenden CLI-Worker per Supervisor, systemd oder Cron betreiben.

Admin-Worker abschalten

Shopware bringt einen „Admin-Worker“ mit, der die Queue nur abarbeitet, solange jemand in der Administration eingeloggt ist. Für Live-Shops ist das nicht verlässlich. Shopware empfiehlt, ihn abzuschalten und einen CLI-Worker zu betreiben:

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

CLI-Worker starten

bin/console messenger:consume async low_priority --time-limit=60 --memory-limit=512M

  • async ist der Transport, über den das Order Tracking läuft. low_priority braucht Shopware selbst.
  • --time-limit und --memory-limit beenden den Worker regelmäßig, ein Prozessmanager startet ihn neu. So sammelt sich kein Speicher an und neuer Code wird nach einem Deployment geladen.

Der Worker muss ständig laufen. Dafür gibt es drei übliche Wege.

Supervisor (empfohlen)

; /etc/supervisor/conf.d/shopware-worker.conf
[program:shopware-worker]
command=php /var/www/shopware/bin/console messenger:consume async low_priority --time-limit=60 --memory-limit=512M
user=www-data
numprocs=1
autostart=true
autorestart=true
startsecs=0
process_name=%(program_name)s_%(process_num)02d
stdout_logfile=/var/log/shopware-worker.log
redirect_stderr=true

supervisorctl reread && supervisorctl update && supervisorctl status

systemd

# /etc/systemd/system/[email protected]
[Unit]
Description=Shopware Message Queue Worker %i
After=network.target mysql.service

[Service]
User=www-data
ExecStart=/usr/bin/php /var/www/shopware/bin/console messenger:consume async low_priority --time-limit=60 --memory-limit=512M
Restart=always
RestartSec=1

[Install]
WantedBy=multi-user.target

systemctl daemon-reload && systemctl enable --now shopware-worker@1

Cron

Wenn weder Supervisor noch systemd zur Verfügung stehen, etwa bei manchem Shared Hosting:

* * * * * php /var/www/shopware/bin/console messenger:consume async low_priority --time-limit=55 --memory-limit=512M >/dev/null 2>&1

Managed Hoster wie maxcluster, Mittwald oder timmehosting bieten Shopware-Worker meist direkt im Kundenportal an. Dann reicht es, den Worker dort mit den Transports async low_priority anzulegen.

Nach Updates neu starten

Mehrere Worker parallel sind kein Problem. Nach jedem Deployment bzw. Plugin-Update die laufenden Worker neu starten, damit sie den neuen Code laden:

bin/console messenger:stop-workers

Scheduled Tasks

Das Order Tracking selbst braucht keine Scheduled Tasks. Shopware braucht sie aber für vieles andere, deshalb sollte im Live-Shop ohnehin bin/console scheduled-task:run als Dienst laufen – genau wie der Worker.