Pull-Warteschlangen in Go verwenden
Mit Sammlungen den Überblick behalten
Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.
Diese Seite bietet eine Übersicht über Pull-Warteschlangen in der App Engine-Standardumgebung.
Bei Push-Warteschlangen werden Aufgaben je nach Konfiguration der Warteschlange an einen Worker-Dienst übergeben. Bei Pull-Warteschlangen muss der Worker-Dienst Aufgaben von der Warteschlange anfordern. Die Warteschlange antwortet, indem sie dem Worker für einen festgelegten Zeitraum exklusiven Zugriff zur Verarbeitung der Aufgabe gewährt. Dieser Vorgang wird als Freigabe bezeichnet.

Bei Pull-Warteschlangen können Sie verwandte Aufgaben mithilfe von Tags gruppieren und einen Worker so konfigurieren, dass er mehrere Aufgaben mit einem bestimmten Tag auf einmal abruft. Dieser Vorgang wird als Stapelverarbeitung bezeichnet.
Wenn ein Worker eine Aufgabe nicht verarbeiten kann, bevor deren Freigabe abläuft, kann er entweder die Freigabe erneuern oder sie auslaufen lassen, sodass sie von einem anderen Worker angefordert werden kann. Sobald die Aufgabe abgeschlossen ist, wird sie vom Worker gelöscht.
Bei Pull-Warteschlangen müssen einige Funktionen, die in Push-Warteschlangen automatisiert sind, durch Code ausgeführt werden:
- Worker skalieren
- Die Anzahl der Worker muss auf Basis der Verarbeitungsmenge vom Code skaliert werden. Ist der Code dazu nicht in der Lage, riskieren Sie entweder Vergeudung von Rechenressourcen, wenn keine Aufgaben verfügbar sind, oder Latenz, wenn zu viele Aufgaben verarbeitet werden müssen.
- Aufgaben löschen
- Aufgaben müssen nach der Verarbeitung explizit vom Code gelöscht werden.
Bei Push-Warteschlangen werden die Aufgaben von App Engine für Sie gelöscht. Wird die Aufgabe aus der Pull-Warteschlange nach der Verarbeitung nicht vom Worker gelöscht, wird die Aufgabe von einem anderen Worker noch einmal verarbeitet. Dadurch werden Rechenressourcen vergeudet und das Fehlerrisiko wird erhöht, wenn Aufgaben nicht idempotent sind.
Zum Erstellen von Pull-Warteschlangen in der App Engine-Standardumgebung müssen Sie in einer Konfigurationsdatei mit dem Namen queue.yaml
ein Attribut festlegen.
Workflow bei Pull-Warteschlangen
Worker, die Tasks aus Pull-Warteschlangen verarbeiten, müssen in einem Dienst definiert sein, der in der App Engine-Standardumgebung ausgeführt wird.
Der Workflow sieht folgendermaßen aus:
- Sie erstellen eine Pull-Warteschlange mit der
queue.yaml
-Datei.
- Sie erstellen Aufgaben und fügen sie der Warteschlange hinzu.
- Der von Ihnen erstellte Worker fordert die Freigabe der Aufgabe an. Dazu verwendet er TaskQueue.
- App Engine sendet dem Worker in der Freigabeantwort die Aufgabendaten.
- Der Worker verarbeitet die Aufgabe. Kann die Aufgabe nicht vor Ablauf der Freigabe ausgeführt werden, kann der Worker die Freigabe verlängern. Ist die Freigabe abgelaufen, kann die Freigabe der Aufgabe zur Verarbeitung durch einen anderen Worker angefordert werden.
- Wurde die Aufgabe erfolgreich ausgeführt, wird sie vom Worker gelöscht.
Weitere Informationen
Sofern nicht anders angegeben, sind die Inhalte dieser Seite unter der Creative Commons Attribution 4.0 License und Codebeispiele unter der Apache 2.0 License lizenziert. Weitere Informationen finden Sie in den Websiterichtlinien von Google Developers. Java ist eine eingetragene Marke von Oracle und/oder seinen Partnern.
Zuletzt aktualisiert: 2025-09-03 (UTC).
[[["Leicht verständlich","easyToUnderstand","thumb-up"],["Mein Problem wurde gelöst","solvedMyProblem","thumb-up"],["Sonstiges","otherUp","thumb-up"]],[["Schwer verständlich","hardToUnderstand","thumb-down"],["Informationen oder Beispielcode falsch","incorrectInformationOrSampleCode","thumb-down"],["Benötigte Informationen/Beispiele nicht gefunden","missingTheInformationSamplesINeed","thumb-down"],["Problem mit der Übersetzung","translationIssue","thumb-down"],["Sonstiges","otherDown","thumb-down"]],["Zuletzt aktualisiert: 2025-09-03 (UTC)."],[[["\u003cp\u003ePull queues in the App Engine standard environment require worker services to actively request tasks, in contrast to push queues where tasks are automatically delivered.\u003c/p\u003e\n"],["\u003cp\u003eWorkers in pull queues operate on tasks with a lease, a designated period of exclusive access, after which the task can be processed by another worker if not completed.\u003c/p\u003e\n"],["\u003cp\u003ePull queues enable task batching through the use of tags, allowing workers to retrieve multiple related tasks simultaneously.\u003c/p\u003e\n"],["\u003cp\u003eUnlike push queues, pull queue implementations necessitate manual scaling of workers and explicit task deletion by the worker service after completion to avoid resource waste or errors.\u003c/p\u003e\n"],["\u003cp\u003eThe workflow for pull queues involves creating a queue via \u003ccode\u003equeue.yaml\u003c/code\u003e, adding tasks, leasing tasks to a worker, processing, potentially modifying the lease duration, and finally, deleting the completed task.\u003c/p\u003e\n"]]],[],null,["# Using Pull Queues in Go\n\nThis page provides an overview of pull queues in the App Engine\nstandard environment.\n| This API is supported for first-generation runtimes and can be used when [upgrading to corresponding second-generation runtimes](/appengine/docs/standard/\n| go\n| /services/access). If you are updating to the App Engine Go 1.12+ runtime, refer to the [migration guide](/appengine/migration-center/standard/migrate-to-second-gen/go-differences) to learn about your migration options for legacy bundled services.\n\nIn *push* queues tasks are delivered to a worker service\nbased on the queue's configuration. In *pull* queues the worker service must *ask*\nthe queue for tasks. The queue responds by allowing that worker unique access\nto process the task for a specified period of time, which is called a *lease*.\n\nUsing pull queues, you can also group related tasks using tags and then configure your\nworker to pull multiple tasks with a certain tag all at once. This process is\ncalled *batching*.\n\nIf a worker cannot process a task before its lease expires, it can either renew the\nlease or let it expire, at which point another worker can acquire it. Once the\nwork associated with a task is complete, the worker must delete it.\n\nUsing pull queues requires your code to handle some functions that are automated\nin push queues:\n\nScaling your workers\n: Your code needs to scale the number of workers based on\n processing volume. If your code does not handle scaling, you risk\n wasting computing resources if there are no tasks to process; you also risk\n latency if you have too many tasks to process.\n\nDeleting the tasks\n: Your code also needs to explicitly delete tasks after processing.\n In push queues, App Engine deletes the tasks for you. If your worker does\n not delete pull queue tasks after processing, another worker will re-process\n the task. This wastes computing resources and risks errors if tasks are\n not [idempotent](https://wikipedia.org/wiki/Idempotence).\n\nPull queues in the App Engine standard environment are created by setting a property in a\nconfiguration file called `queue.yaml`.\n\nPull queue workflow\n-------------------\n\nWorkers that process tasks from pull queues must be defined within a service that runs\nin the App Engine standard environment.\n\nThe workflow is as follows:\n\n1. You [create a pull queue](/appengine/docs/legacy/standard/go111/taskqueue/pull/creating-pull-queues), using `queue.yaml`.\n2. You [create tasks](/appengine/docs/legacy/standard/go111/taskqueue/pull/creating-tasks) and add them to the queue.\n3. The worker you have created [leases the task](/appengine/docs/legacy/standard/go111/taskqueue/pull/leasing-pull-tasks), using [TaskQueue.](/appengine/docs/legacy/standard/go111/taskqueue/reference)\n4. App Engine sends task data to the worker in the lease response.\n5. The worker processes the task. If the task fails to execute before the lease expires, the worker can modify the lease duration. If the lease expires, the task will be available to be leased to another worker.\n6. After a task is processed successfully, the [worker deletes it](/appengine/docs/legacy/standard/go111/taskqueue/pull/leasing-pull-tasks#deleting-tasks).\n\nWhat's next\n-----------\n\n- Learn how to [create pull queues](/appengine/docs/legacy/standard/go111/taskqueue/pull/creating-pull-queues)."]]