Zum Inhalt springen
openProd

openProd importiert Lieferanten-PDFs und Tabellen in Ihr PIM.

openProd live erleben.

Demo buchen (öffnet in neuem Tab)

Pimcore

Wie lässt sich Pimcore mit Symfony Messenger nutzen?

Lesezeit: 3 Min.

Queues in Pimcore lassen sich mit Symfony Messenger so einfach umsetzen wie nie zuvor. Sie möchten Antwortzeiten verkürzen und zeitaufwendige Aufgaben an passende Services abgeben? So funktioniert es.

Auf dieser Seite 6 Abschnitte

Weniger warten: Symfony Messenger erledigt Aufgaben Ihrer Pimcore-Anwendung im Hintergrund.

Was ist Symfony Messenger?

Mit Symfony Messenger verwalten Anwendungen Queues besser, vor allem bei der Kommunikation mit anderen Systemen oder wenn Aufgaben an andere Services übergeben werden. Pimcore hat alle früheren asynchronen Queues durch Symfony Messenger ersetzt. Deshalb lässt er sich deutlich einfacher in Ihr Projekt integrieren.

Ein Beispiel aus der Praxis

Angenommen, Ihre Website hat ein Formular für die Teilnahme an einem Gewinnspiel, ein ganz einfaches mit nur drei Feldern:

  • firstname
  • e-mail
  • message
Competition entry form with first name, email and message fields
Wettbewerbsformular

Es entspricht außerdem weitgehend der Klassendefinition der Objekte, die in Pimcore gespeichert werden.

Pimcore class definition CompetitionApplication with firstname, email, message and date fields
Klassendefinition des Wettbewerbs in Pimcore

Der Controller verarbeitet das Formular, speichert das Objekt in der Datenbank und versendet eine passende E-Mail.

Das funktioniert gut. Aber geht es besser?

Wo liegt das Problem?

Vor der Einführung von Symfony Messenger dauerte es rund 4 Sekunden, das Formular zu verarbeiten, das Objekt zu speichern und die E-Mail zu senden.

Browser network panel before Symfony Messenger: 6 requests, load in 3.71 s
Leistung vor Symfony Messenger

Warum? Hauptursache ist die Kommunikation mit dem SMTP-Server, der die E-Mails versendet. Lässt man diesen Schritt weg und speichert nur das Objekt, ist die Verarbeitungszeit eine völlig andere. Dieser Unterschied beeinflusst, wie Nutzer die Bedienbarkeit und Performance der Website wahrnehmen.

Browser network panel before Symfony Messenger without the SMTP connection: load in 152 ms
Vor Symfony Messenger, ohne SMTP-Verbindung

Die Magie der Queues

Genau deshalb hat Pimcore die alten asynchronen Queues durch Symfony Messenger ersetzt. Sie benötigen zwei Klassen:

  • CompetitionApplicationMessage speichert die Daten, in diesem Fall die CompetitionApplication.
  • CompetitionApplicationMessageHandler speichert in diesem Fall das Objekt und versendet die E-Mail.

Statt im Controller das Objekt zu speichern und die E-Mail zu senden, rufen Sie nun CompetitionApplicationMessage auf. Dazu injizieren Sie das MessageBusInterface in die Funktion, die Anfragen entgegennimmt. Denken Sie daran, Ihre Services umzustellen. Teilen Sie Ihrem Handler per YAML-Konfiguration mit, dass er jetzt ein Message Handler ist.

Klingt gut. Doch das Formular braucht weiterhin fast 4 Sekunden. Eine große Enttäuschung.

Der Schlüssel ist Asynchronität.

Symfony Messenger führt Aufgaben automatisch aus. Damit sie asynchron laufen, legen Sie in der Konfigurationsdatei config/packages/messenger.yaml fest, wie die Nachricht ausgeführt und verarbeitet werden soll. Die Umgebungsvariable MESSENGER_TRANSPORT_DSN bestimmt, welcher Transport für die Queues zuständig ist. Das kann Redis, RabbitMQ oder sogar eine Datenbank sein. Damit Queue-Aufgaben zuverlässig und regelmäßig über cron oder supervisord laufen, muss der Befehl php bin/console messenger:consume async ausgeführt werden.

Ergebnisse

Wenn wir unser Formular mit Symfony Messenger asynchron verarbeiten, verbessert sich die Performance deutlich.

Browser network panel after Symfony Messenger: load in 67 ms
Leistung nach Symfony Messenger

Nutzen Sie zusätzlich ein Prozessmanagement wie supervisord, trägt der Service, der die Prozesse steuert, die Last der Aufgabenlogik und nicht die Anwendung. Bei hohem Traffic und vielen Prozessen kann das die wahrgenommene Performance und Stabilität erheblich verbessern.

Ein weiterer Vorteil: Ist der SMTP-Dienst nicht erreichbar, gilt die Aufgabe nicht als erledigt und wird bis zu dreimal erneut gestartet. Läge die Logik weiterhin im Controller und würde die E-Mail nicht korrekt versendet, gäbe es keinen neuen Versuch. Wie viele Wiederholungen es gibt und in welchen Abständen, legen Sie in der Konfiguration von Messenger fest.

30-minütige Beratung buchen

Über den Autor

Mateusz Soroka

CTO

Das Team kennenlernen

Weiterlesen

Ähnliche Artikel

Olgierd Mrozik, CEO of LemonMind
Olgierd MrozikCEO, LemonMind
Olgierd MrozikCEO, LemonMind

Von der Theorie zur Umsetzung

30‑minütige Beratung buchen

Ein 30-minütiges Gespräch mit Olgierd Mrozik, CEO von LemonMind.

30 Minuten. Google Kalender öffnet sich in einem neuen Tab.

  • 2010 gegründet
  • 300+ Projekte
  • 45+ Pimcore-Kunden