Versionen im Vergleich

Schlüssel

  • Diese Zeile wurde hinzugefügt.
  • Diese Zeile wurde entfernt.
  • Formatierung wurde geändert.

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 stattginden 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
languagebash
php plugin/remote/brandbox/framework/src/entrypoint.php -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
languagephp
titleMessage/Lib/Message/NewUserWelcomeEmailHandler.php
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
languagephp
titleMessage/Lib/Message/NewUserWelcomeEmailHandler.php
use Brandbox\YourApp\YourNamespace\YourPackage;
use \Brandbox\FrameworkMessenger\Messenger\Messenger;

$userId = 5
$message = new YourPackage\Lib\Message\NewUserWelcomeEmail($userId);

Messenger\BusFactory
    ::get()
    ->dispatch($message)
;

Es stehen darüber Hinaus weitere Möglichkeiten zur Verfügung die Art und Weise zu beeinflussen, wie die Nachricht verarbeitet wird. Lesen Sie dazu:

Envelopes & Stamps https://symfony.com/doc/6.2/messenger.html#envelopes-stamps