Der Messenger bietet einen Nachrichtenbus mit der Möglichkeit, Nachrichten zu senden und diese dann sofort in Ihrer Anwendung zu verarbeiten oder sie zur späteren Verarbeitung über Transporte (z. B. Warteschlangen) zu senden.
...
In brandbox wird der Messenger genutzt, um Aufgaben abzuarbeiten, die asynchron stattfinden sollen. Das schützt davor dass die Anwendung blockiert wird. Die Warteschlange wird von einem Runner in einem separaten Docker-Container ausgeführt. Dabei erhält jede Warteschlange einen eigenen Runner.
Runner
Ein Runner ist eine Komponente, die bestimmte Aufgaben ausführt oder Aktionen koordiniert. Der genaue Kontext und die Aufgaben, die ein Runner ausführt, können jedoch variieren, abhängig von der spezifischen Anwendung oder dem System.
Der Runner kann über nachfolgenden Aufruf gestartet werden. Er wird in Form eines eigenständigen Endpoints ausgeführt und erwartet den Namen der Queue auf die gelauscht werden soll. Der Runner zu testzwecken direkt im Application-Container ausgeführt werden, soll im Produktivbetrieb jedoch in einem separaten Runner-Container laufen.
Codeblock | ||
---|---|---|
| ||
php plugin/remote/brandbox/framework/src/entrypoint.php -host=domain.brandbox.de -endpoint=messenger -queue=YourQueue |
Warteschlangen (Queues)
Eine Queue ist eine Datenstruktur, die dazu verwendet wird, Daten oder Elemente in einer bestimmten Reihenfolge zu speichern und zu verwalten. Die Queue funktioniert nach dem Prinzip "First-In-First-Out" (FIFO), was bedeutet, dass das erste Element, das in die Queue eingefügt wurde, auch das erste Element ist, das aus der Queue entfernt wird.
Im obigen Beispiel wird die Queue YourQueue vom Runner überwacht und abgearbeitet.
Messages und Handler
Messages sind Datenelemente oder Informationen, die zwischen verschiedenen Teilen der Anwendung, Systemen oder Komponenten übertragen werden. Messages sind eine wichtige Form der Kommunikation und ermöglichen es, Informationen von einer Quelle zu einem Ziel zu senden oder zu empfangen.
Im Mittelpunkt stehen zwei verschiedene Klassen, die Sie erstellen: (1) eine Nachrichtenklasse, die Daten enthält, und (2) eine Handlerklasse, die aufgerufen wird, wenn die Nachricht versendet wird. Die Handler-Klasse liest die Nachrichtenklasse und führt eine oder mehrere Aufgaben aus. Quelle: https://symfony.com/doc/6.2/messenger.html#creating-a-message-handler
...
Codeblock | ||
---|---|---|
| ||
namespace Brandbox\YourApp\YourNamespace\YourPackage\Lib\Message { use Symfony\Component\Messenger; #[Messenger\Attribute\AsMessageHandler] class NewUserWelcomeEmailHandler { public function __construct( ) { } public function __invoke(NewUserWelcomeEmail $message) { $message = sprintf('$userId = %s', $message->getUserId()); } } } |
Nachricht senden
Um eine Aufgabe asynchron zu verarbeiten, wird die Nachricht dispatched (verschickt).
Codeblock | ||
---|---|---|
| ||
use Brandbox\YourApp\YourNamespace\YourPackage; use \Brandbox\FrameworkMessenger\Messenger\Messenger; $userId = 5; $message = new YourPackage\Lib\Message\NewUserWelcomeEmail($userId); Messenger\BusFactory ::get() ->dispatch($message, 'YourQueue') ; |
...