Seit TYPO3 12.2 können Entwickler die leistungsstarke Symfony Messenger-Komponente nutzen, die direkt in den TYPO3 Kern integriert ist. Diese bahnbrechende Funktion ermöglicht die asynchrone Verarbeitung zeitaufwändiger Aufgaben und verbessert so die Benutzerfreundlichkeit und Systemleistung.
Was ist der Symfony Messenger in TYPO3?
Die Nachrichtenbus-Lösung von TYPO3 basiert auf symfony/messenger und kann Nachrichten zur sofortigen Bearbeitung (synchron) oder über Transporte wie Warteschlangen (asynchron) zur späteren Bearbeitung senden. Aus Gründen der Abwärtskompatibilität verwendet die Standardimplementierung den synchronen Transport.
Warum sollte man Hintergrundjobs in TYPO3 verwenden?
Hintergrundjobs sind unerlässlich für:
- E-Mail-Verarbeitung - Versenden von Newslettern ohne das Frontend zu blockieren
- Bildoptimierung - Hochgeladene Bilder asynchron verarbeiten
- Datenimporte - Effiziente Verarbeitung von großen CSV-Importen
- Berichtserstellung - Erstellung komplexer Berichte ohne Timeouts
- Cache-Erwärmung - Caches im Hintergrund neu aufbauen
Einrichten von Symfony Messenger in TYPO3
Schritt 1: Konfigurieren Sie den Nachrichtentransport
Erstellen oder ändern Sie Ihre config/system/additional.php:
<?php
return [
'EXTENSIONS' => [
'messenger' => [
'transports' => [
'async' => [
'dsn' => 'doctrine://default',
'options' => [
'table_name' => 'messenger_messages',
'queue_name' => 'async'
]
]
]
]
]
];
Schritt 2: Erstellen einer Nachrichtenklasse
Erstellen Sie eine einfache Nachrichtenklasse in Ihrer Erweiterung:
<?php
declare(strict_types=1);
namespace MyVendor\MyExtension\Message;
final class ProcessImageMessage
{
public function __construct(
private readonly int $fileId,
private readonly string $processingType = 'thumbnail'
) {}
public function getFileId(): int
{
return $this->fileId;
}
public function getProcessingType(): string
{
return $this->processingType;
}
}
<?php
declare(strict_types=1);
namespace MyVendor\MyExtension\MessageHandler;
use MyVendor\MyExtension\Message\ProcessImageMessage;
use TYPO3\CMS\Core\Messaging\AbstractMessage;
final class ProcessImageMessageHandler
{
public function __invoke(ProcessImageMessage $message): void
{
// Your background processing logic here
$fileId = $message->getFileId();
$processingType = $message->getProcessingType();
// Process the image
$this->processImage($fileId, $processingType);
}
private function processImage(int $fileId, string $type): void
{
// Image processing implementation
// This runs in the background!
}
}
services:
MyVendor\MyExtension\MessageHandler\ProcessImageMessageHandler:
tags:
- name: messenger.message_handler
handles: MyVendor\MyExtension\Message\ProcessImageMessage
Schritt 5: Routing konfigurieren
Fügen Sie die Routing-Konfiguration hinzu, um Nachrichten an den asynchronen Transport zu senden:
framework:
messenger:
routing:
'MyVendor\MyExtension\Message\ProcessImageMessage': async
Versenden von Nachrichten
Versenden Sie in Ihrem Controller oder Dienst Nachrichten an die Warteschlange:
<?php
use TYPO3\CMS\Core\Messaging\MessageBus;
use MyVendor\MyExtension\Message\ProcessImageMessage;
class ImageController
{
public function __construct(
private readonly MessageBus $messageBus
) {}
public function uploadAction(): void
{
// Handle file upload
$fileId = 123;
// Dispatch to background queue
$this->messageBus->dispatch(
new ProcessImageMessage($fileId, 'thumbnail')
);
// User sees immediate response
// Processing happens in background
}
}
Verarbeitung der Warteschlange
Das Warteschlangensystem enthält einen asynchronen Modus, um zeitaufwändige Aufgaben effizienter zu bearbeiten. Führen Sie den Worker aus, um Nachrichten in der Warteschlange zu verarbeiten:
# Process messages from the async transport
php bin/console messenger:consume async
# Process with limits
php bin/console messenger:consume async --limit=10 --time-limit=3600
Best Practices für TYPO3-Hintergrundaufträge
1.Fehlerbehandlung Implementieren Sie in Ihren Nachrichten-Handlern immer eine ordnungsgemäße Fehlerbehandlung, um endlose Wiederholungsschleifen zu vermeiden.
2.Ressourcenverwaltung Überwachen Sie die Speichernutzung und die Verarbeitungszeit, um eine Überlastung Ihres Servers zu vermeiden.
3. Überwachung Verwenden Sie den Befehl messenger:stats, um den Zustand der Warteschlange und die Anzahl der Nachrichten zu überwachen.
4. Skalierung Führen Sie für Anwendungen mit hohem Datenaufkommen mehrere Worker aus oder verwenden Sie externe Warteschlangensysteme wie Redis oder RabbitMQ.
Fazit
Mit TYPO3 12 wurde die leistungsstarke Komponente symfony/messenger in den TYPO3 Kern integriert, wodurch Entwickler reaktionsschnellere Anwendungen erstellen können. Durch die Implementierung von Hintergrundaufgaben für zeitaufwändige Vorgänge können Sie die Benutzererfahrung erheblich verbessern und gleichzeitig die Systemleistung aufrechterhalten.
Beginnen Sie mit einfachen Aufgaben wie der E-Mail Verarbeitung und verlagern Sie dann nach und nach komplexe Vorgänge in Hintergrundwarteschlangen. Ihre Benutzer werden die schnelleren Antwortzeiten zu schätzen wissen, und Ihr Server wird Ihnen für die geringere Auslastung dankbar sein.
Die asynchrone Zukunft der TYPO3 Entwicklung ist da nutzen Sie sie, um bessere, skalierbarere Anwendungen zu entwickeln!
Post a Comment