Message Queue mit Redis konfigurieren
Sofern mehrere Prozesse zur Abarbeitung von Nachrichten aus der Message Queue von Shopware 6 eingesetzt werden sollen, muss sichergestellt werden, dass identische Nachrichten nicht von den selben Consumern abgearbeitet werden. Hierzu ist die Verwendung einer Technologie notwendig, die das atomare Sperren von Nachrichten unterstützt. Hierfür eignen sich Redis oder RabbitMQ.
Vorbereitung in Shopware
Zunächst muss der Admin Worker
deaktiviert werden, damit die Message Queue über einen Hintergrund-Prozess abgearbeitet werden kann. Mehr Informationen zum Deaktivieren des Admin Workers und der initialen Einrichtung über einen Systemd-Service
erfahren Sie hier: Shopware 6 Background Queue Worker einrichten.
Konfiguration über die Shopware Umgebungskonfiguration
Erstellen Sie eine neue Konfigurationsdatei unter dem Pfad: config/packages/messenger.yaml
. Mithilfe dieser Konfigurationsdatei kann der Shopware Messenger Transport-Dienst konfiguriert werden. Fügen Sie anschließend folgenden Inhalt in die Datei ein:
parameters:
env(MESSENGER_CONSUMER_NAME): 'consumer'
framework:
messenger:
transports:
default:
dsn: "redis://%env(REDIS_HOST)%:%env(REDIS_PORT)%/messages/symfony/consumer-%env(MESSENGER_CONSUMER_NAME)%/?delete_after_ack=true&delete_after_reject=true&dbindex=%env(REDIS_DB_MESSENGER)%"
In dieser Konfigurationsdatei werden folgende Umgebungsvariablen genutzt:
Variable | Beschreibung |
---|---|
MESSENGER_CONSUMER_NAME | Name des Consumers (Der Name muss pro Consumer eindeutig sein) |
REDIS_HOST | Hostname oder IP-Adresse zum Redis-Server |
REDIS_PORT | TCP-Port für Redis Verbindungen (Standard: 6379) |
REDIS_DB_MESSENGER | Redis-Datenbank für den Messenger |
Die hier verwendeten Variablen müssen anschließend in der Umgebungskonfiguration .env
von Shopware hinzugefügt werden. Öffnen Sie hierzu die .env
Datei im Shopware Root-Verzeichnis und ergänzen Sie folgenden Teil in der bestehenden Konfiguration:
# .env
# [...]
# Message Queue Configuration
MESSENGER_CONSUMER_NAME=default
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
REDIS_DB_MESSENGER=1
Die Umgebungsvariable MESSENGER_CONSUMER_NAME
wird durch den Systemd- oder Supervisor-Service überschrieben, sodass auch die Ausführung von mehreren gleichzeitigen Consumern unterstützt wird.
Speichern Sie die Datei anschließend und leeren Sie den Shopware Cache über die Konsole:
bin/console cache:clear
Anschließend wird die Shopware Message Queue über Redis ausgeführt.
Prüfen Sie zuletzt, ob die messenger:consume
Prozesse einwandfrei arbeiten.
systemctl status shopware_consumer
Beispiel-Ausgabe:
● shopware_consumer.service - Shopware Message Queue Consumer #1
Loaded: loaded (/etc/systemd/system/shopware_consumer.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2022-12-01 14:00:00 CET; 60s ago
Main PID: 501963 (php)
Tasks: 1 (limit: 19169)
Memory: 111.8M
CPU: 11.298s
CGroup: /system.slice/shopware_consumer.service
└─501963 php /var/www/domain.com/shopware/current/bin/console messenger:consume --time-limit=120 --memory-limit=512M
Dez 01 14:01:00 demo.creolineserver.com systemd[1]: Started Shopware Message Queue Consumer #1.
Dez 01 14:01:00 demo.creolineserver.com php[501963]: [OK] Consuming messages from transports "default".
Dez 01 14:01:00 demo.creolineserver.com php[501963]: // The worker will automatically exit once it has exceeded 512M of memory, been
Dez 01 14:01:00 demo.creolineserver.com php[501963]: // running for 121s or received a stop signal via the messenger:stop-workers
Dez 01 14:01:00 demo.creolineserver.com php[501963]: // command.
Dez 01 14:01:00 demo.creolineserver.com php[501963]: // Quit the worker with CONTROL-C.
Dez 01 14:01:00 demo.creolineserver.com php[501963]: // Re-run the command with a -vv option to see logs about consumed messages.