Auf dieser Seite wird gezeigt, wie Sie Aufgaben erstellen und in Push-Warteschlangen einfügen. Wenn Sie eine Aufgabe verarbeiten möchten, müssen Sie ein neues Aufgabenobjekt erstellen und in eine Warteschlange stellen. Sie können den Dienst und den Handler, mit denen die Aufgabe verarbeitet wird, ausdrücklich angeben und optional aufgabenspezifische Daten an den Handler weiterleiten. Außerdem können Sie für die Konfiguration der Aufgabe Feineinstellungen vornehmen, z. B. einen Zeitpunkt in der Zukunft festlegen, an dem die Aufgabe ausgeführt werden soll, oder die Anzahl ihrer Wiederholungen bei Fehlversuchen beschränken.
Neue Aufgabe erstellen
Um eine Aufgabe zu erstellen und in die Warteschlange einzufügen, erstellen Sie ein PushTask-Objekt und rufen Sie dessen Methode add()
auf. Sie können die Aufgabe in eine in queue.yaml
festgelegte Warteschlange einfügen. Dazu geben Sie in add()
das Argument für den Warteschlangennamen an. Wenn Sie add()
ohne Argumente aufrufen, wird die Aufgabe der Standardwarteschlange hinzugefügt.
Sie können in eine Warteschlange mit PushQueue auch mehrere Aufgaben als Block einfügen. Im folgenden Beispiel werden mit der Methode addTasks()
zwei PushTask-Objekte in einer PushQueue platziert.
Das folgende Codebeispiel zeigt, wie Sie eine einzelne Aufgabe hinzufügen:
Das folgende Codebeispiel zeigt, wie Sie mehrere Aufgaben gleichzeitig hinzufügen:
Wenn Sie PushTask
und PushQueue
verwenden, müssen Sie am Anfang Ihrer PHP-Datei die folgenden Anweisungen eingeben:
Worker-Dienst angeben
Wenn eine Aufgabe in der Warteschlange an der Reihe ist, wird sie vom Dienst für Aufgabenwarteschlangen an einen Worker-Dienst gesendet. Jede Aufgabe verfügt über ein Ziel und eine URL, mit denen bestimmt wird, von welchem Dienst und Handler die Aufgabe letztendlich ausgeführt wird.
target
Mit dem Ziel wird der Dienst angegeben, der die HTTP-Anfrage zur Ausführung der Aufgabe erhält. Dabei handelt es sich um einen String, mit dem ein Dienst, eine Version oder eine Instanz in einem der kanonischen Formate angegeben wird. Am häufigsten werden folgende Formate verwendet:
service
version.service
instance.version.service
Der String „target“ wird dem Domainnamen Ihrer Anwendung vorangestellt. Es gibt drei Möglichkeiten, um das Ziel für eine Aufgabe festzulegen:
Sie deklarieren das Ziel beim Erstellen der Aufgabe. Sie können beim Erstellen des PushTask-Objekts das Ziel explizit mit dem Headerparameter im Array
$options
festlegen:$task = new PushTask( '/worker', [], ['header' => "Host: versionHostname"]);
Sie fügen eine
target
-Anweisung hinzu, wenn Sie eine Warteschlange in der Dateiqueue.yaml
definieren, so wie bei der Definition vonqueue-blue
. Alle Aufgaben, die mittarget
in die Warteschlange eingefügt werden, verwenden dieses Ziel, auch wenn der Aufgabe zum Zeitpunkt ihres Erstellens ein anderes Ziel zugewiesen war.Wenn kein Ziel mit einer der beiden vorherigen Methoden angegeben wurde, ist das Ziel der Aufgabe die Version des Dienstes, von der sie in die Warteschlange gestellt wurde. Wenn Sie auf diese Weise eine Aufgabe vom Standarddienst und der Standardversion in die Warteschlange einfügen und sich die Standardversion vor Ausführung der Aufgabe ändert, wird die Aufgabe in der neuen Standardversion ausgeführt.
url
url
wählt einen der Handler im Zieldienst aus, der die Aufgabe ausführen soll.
Dabei muss url
mit einem der URL-Muster des Handlers im Zieldienst übereinstimmen. url
kann Abfrageparameter enthalten, wenn in der Aufgabe die Methode GET
oder PULL
festgelegt wurde. Wenn kein url
-Wert in der Standard-URL festgelegt ist, wird /_ah/queue/[QUEUE_NAME]
verwendet. Dabei ist [QUEUE_NAME]
der Name der Aufgabenwarteschlange.
Daten an den Handler übergeben
Sie können Daten an den Handler als Abfrageparameter in der URL der Aufgabe übergeben. Voraussetzung dafür ist, dass in der Aufgabe die Methode GET
oder PULL
festgelegt wurde.
Der Konstruktor PushTask
hat ein Positionsargument für „query_data“.
Diese Daten bestehen in der Regel aus einem Wörterbuch von Schlüssel/Wert-Paaren. Wenn die Methode der Aufgabe POST
oder PUT
lautet, werden die Daten der Nutzlast der HTTP-Anfrage hinzugefügt. Wenn die Methode GET lautet, werden sie der URL als Abfrageparameter hinzugefügt.
Aufgabe benennen
Wenn Sie eine neue Aufgabe erstellen, wird ihr von App Engine standardmäßig ein eindeutiger Name zugewiesen. Sie können einer Aufgabe jedoch mit dem Parameter name
auch eigene Namen zuweisen. Die Zuweisung eigener Aufgabennamen hat den Vorteil, dass benannte Aufgaben dedupliziert werden. So können Sie anhand von Aufgabennamen gewährleisten, dass eine Aufgabe nur einmal hinzugefügt wird. Die Deduplizierung wird noch neun Tage fortgeführt, nachdem die Aufgabe abgeschlossen oder gelöscht wurde.
Dabei ist zu beachten, dass die Deduplizierungslogik zu signifikanten Leistungseinbußen führen und die Latenzen und unter Umständen auch die Fehlerraten im Zusammenhang mit benannten Aufgaben erhöhen kann. Bei sequenziellen Aufgabennamen, beispielsweise mit Zeitstempeln, können diese Einbußen noch erheblich höher ausfallen. Wir empfehlen daher, beim Zuweisen eigener Namen ein wohlüberlegtes Präfix für Aufgabennamen zu verwenden, beispielsweise einen Hashwert des Inhalts.
Wenn Sie Aufgaben eigene Namen zuweisen, dürfen Sie die maximale Namenslänge von 500 Zeichen nicht überschreiten. Der Name kann Groß- und Kleinbuchstaben, Zahlen sowie Unter- und Bindestriche enthalten.