© Arak Rattanawijittakorn/Shutterstock.com
PHP Magazin
Asynchrone Prozesse in Symfony realisieren

Die neue Messenger-Komponente


Eins der großen, neuen Features in Symfony 4 ist die im letzten Release veröffentlichte Messenger-Komponente. Vergleichbar mit dem EventDispatcher versendet sie Nachrichten, kann diese aber auch über Anwendungsgrenzen hinweg senden und empfangen. Damit bietet sie das Potenzial, Event Sourcing und CQRS in Symfony-Anwendungen einzuführen.

Die Messenger-Komponente implementiert das Message-Bus-Entwurfsmuster [1]. Im Kern geht es dabei um das Senden und Empfangen von Nachrichten. Auf diese Weise kann eine asynchrone Kommunikation zwischen Anwendungen ermöglicht werden. Eine Nachricht ist vergleichbar mit den bereits bekannten Events aus Symfony. Sie kapselt Daten, die von einer Absenderklasse an eine Empfängerklasse übermittelt werden. Welche Nachricht an welchen Empfänger übermittelt wird, wird vom Messagebus bestimmt. Das MessageBusInterface, über das man Nachrichten verschickt, hat nur eine Methode namens dispatch, der man ein beliebiges PHP-Objekt als Nachricht übergeben kann. Standardmäßig wird das Objekt mit der Serializer-Komponente in einen JSON-String umgewandelt und an einen Transport weitergereicht. Bei asynchroner Verarbeitung wird die Nachricht über einen Transport weitergeschickt. Ebenso holt der Messenger Nachrichten aus dem Transport, um sie zu verarbeiten. Aktuell unterstützt die Messenger-Komponente zwei native Transporte. Standardmäßig werden Nachrichten ohne Umwege, in der gleichen Anwendung, im selben PHP-Prozess synchron verarbeitet. Das ist vor allem für das Debugging hilfreich, da man zum Beispiel mit XDebug einfach nachverfolgen kann, wie die Nachricht verarbeitet wird. Der zweite Transport verwendet das AMQP-Protokoll über die entsprechende PHP-Extension zum Versand der Nachricht an eine Messagequeue und zum Empfangen von Nachrichten aus einer Messagequeue. Welcher Transport für welche Nachricht verwendet werden soll, wird über das Routing in der Konfiguration des Busses gesteuert. Um Nachrichten aus einer Messagequeue zu verarbeiten, kann ei...

PHP Magazin
Asynchrone Prozesse in Symfony realisieren

Die neue Messenger-Komponente

Eins der großen, neuen Features in Symfony 4 ist die im letzten Release veröffentlichte Messenger-Komponente. Vergleichbar mit dem EventDispatcher versendet sie Nachrichten, kann diese aber auch über Anwendungsgrenzen hinweg senden und empfangen. Damit bietet sie das Potenzial, Event Sourcing und CQRS in Symfony-Anwendungen einzuführen.

Denis Brumann


Eins der großen, neuen Features in Symfony 4 ist die im letzten Release veröffentlichte Messenger-Komponente. Vergleichbar mit dem EventDispatcher versendet sie Nachrichten, kann diese aber auch über Anwendungsgrenzen hinweg senden und empfangen. Damit bietet sie das Potenzial, Event Sourcing und CQRS in Symfony-Anwendungen einzuführen.

Die Messenger-Komponente implementiert das Message-Bus-Entwurfsmuster [1]. Im Kern geht es dabei um das Senden und Empfangen von Nachrichten. Auf diese Weise kann eine asynchrone Kommunikation zwischen Anwendungen ermöglicht werden. Eine Nachricht ist vergleichbar mit den bereits bekannten Events aus Symfony. Sie kapselt Daten, die von einer Absenderklasse an eine Empfängerklasse übermittelt werden. Welche Nachricht an welchen Empfänger übermittelt wird, wird vom Messagebus bestimmt. Das MessageBusInterface, über das man Nachrichten verschickt, hat nur eine Methode namens dispatch, der man ein beliebiges PHP-Objekt als Nachricht übergeben kann. Standardmäßig wird das Objekt mit der Serializer-Komponente in einen JSON-String umgewandelt und an einen Transport weitergereicht. Bei asynchroner Verarbeitung wird die Nachricht über einen Transport weitergeschickt. Ebenso holt der Messenger Nachrichten aus dem Transport, um sie zu verarbeiten. Aktuell unterstützt die Messenger-Komponente zwei native Transporte. Standardmäßig werden Nachrichten ohne Umwege, in der gleichen Anwendung, im selben PHP-Prozess synchron verarbeitet. Das ist vor allem für das Debugging hilfreich, da man zum Beispiel mit XDebug einfach nachverfolgen kann, wie die Nachricht verarbeitet wird. Der zweite Transport verwendet das AMQP-Protokoll über die entsprechende PHP-Extension zum Versand der Nachricht an eine Messagequeue und zum Empfangen von Nachrichten aus einer Messagequeue. Welcher Transport für welche Nachricht verwendet werden soll, wird über das Routing in der Konfiguration des Busses gesteuert. Um Nachrichten aus einer Messagequeue zu verarbeiten, kann ei...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang