Cette page explique comment créer des tâches et les placer dans des files d'attente d'envoi. Lorsque vous souhaitez traiter une tâche, vous devez créer un objet de tâche et le placer dans une file d'attente. Vous pouvez spécifier explicitement le service et le gestionnaire qui traitent la tâche et éventuellement transmettre au gestionnaire des données spécifiques à la tâche. Vous pouvez également ajuster la configuration de la tâche, par exemple en planifiant une heure future d'exécution ou en limitant le nombre de nouvelles tentatives en cas d'échec de la tâche.
Créer une tâche
Pour créer une tâche et la placer en file d'attente, créez l'objet PushTask et appelez sa méthode add()
. Vous pouvez l'ajouter à une file d'attente spécifiée dans queue.yaml
en fournissant un argument de nom de file d'attente à add()
. Vous pouvez également appeler add()
sans argument pour ajouter la tâche à la file d'attente par défaut.
Vous pouvez également ajouter des tâches de façon groupée à une file d'attente à l'aide de PushQueue. Dans l'exemple suivant, deux objets PushTask sont ajoutés à une file PushQueue à l'aide de la méthode addTasks()
.
L'exemple de code suivant montre comment ajouter une seule tâche.
L'exemple de code suivant montre comment ajouter plusieurs tâches à la fois :
Lorsque vous utilisez PushTask
et PushQueue
, incluez ces instructions en haut de votre fichier PHP :
Spécifier le service de nœuds de calcul
Lorsqu'une tâche est extraite de sa file d'attente, le service de file d'attente de tâches l'envoie à un service de nœuds de calcul. Chaque tâche comporte un élément target (cible) et un élément url, qui déterminent le service et le gestionnaire qui exécuteront la tâche.
target
La cible spécifie le service qui recevra la requête HTTP permettant d'exécuter la tâche. Il s'agit d'une chaîne qui spécifie un service, une version ou une instance dans une forme canonique. Voici les formes les plus courantes :
service
version.service
instance.version.service
La chaîne cible est ajoutée au début du nom de domaine de votre application. Il existe trois façons de définir la cible pour une tâche :
Déclarez la cible au moment de créer la tâche. Vous pouvez définir la cible explicitement lors de la création de la tâche à l'aide du paramètre d'en-tête du tableau
$options
lorsque vous créez l'objet PushTask :$task = new PushTask( '/worker', [], ['header' => "Host: versionHostname"]);
Incluez une instruction
target
lorsque vous définissez une file d'attente dans le fichierqueue.yaml
, comme dans la définition dequeue-blue
. Toutes les tâches ajoutées à une file d'attente avec une instructiontarget
utiliseront cette cible, même si une autre cible a été attribuée à la tâche au moment de sa création.Si aucune cible n'est spécifiée selon l'une des deux méthodes précédentes, la cible de la tâche correspond alors à la version du service qui la met en file d'attente. Notez que si vous placez ainsi en file d'attente une tâche issue du service et de la version par défaut, et que la version par défaut change avant que la tâche ne soit lancée, cette dernière s'exécute dans la nouvelle version par défaut.
url
L'élément url
sélectionne l'un des gestionnaires du service cible, qui effectuera la tâche.
L'élément url
doit correspondre à l'un des formats d'URL de gestionnaire du service cible. L'élément url
peut comprendre des paramètres de requête si la méthode spécifiée dans la tâche est GET
ou PULL
. Si aucun élément url
n'est spécifié, l'URL par défaut /_ah/queue/[QUEUE_NAME]
est utilisée, où [QUEUE_NAME]
correspond au nom de la file d'attente de la tâche.
Transmettre des données au gestionnaire
Vous pouvez transmettre des données au gestionnaire en tant que paramètres de requête dans l'URL de la tâche, mais seulement si la méthode spécifiée dans la tâche est GET
ou PULL
.
Le constructeur PushTask
possède un argument positionnel pour le paramètre "query_data".
Les données correspondent généralement à un dictionnaire de paires clé/valeur. Si la méthode de la tâche est POST
ou PUT
, les données sont ajoutées à la charge utile de la requête HTTP. Si la méthode est GET, les données sont ajoutées à l'URL en tant que paramètres de requête.
Nommer une tâche
Lorsque vous créez une tâche, App Engine lui attribue un nom unique par défaut. Vous pouvez toutefois attribuer le nom de votre choix à une tâche à l'aide du paramètre name
. Les tâches auxquelles vous avez attribué un nom personnalisé présentent l'avantage d'être dédupliquées, ce qui signifie que vous pouvez utiliser des noms de tâches pour vous assurer que les tâches ne sont ajoutées qu'une seule fois. La déduplication se poursuit pendant neuf jours après l'achèvement ou la suppression de la tâche.
Notez que la logique de déduplication introduit une surcharge de performances importante, entraînant des latences accrues et des taux d'erreur potentiellement plus élevés associés aux tâches nommées. Ces coûts peuvent être considérablement augmentés si les tâches sont nommées de manière séquentielle, par exemple avec des horodatages. Par conséquent, si vous attribuez vos propres noms, nous vous recommandons d'utiliser un préfixe distribué de manière homogène pour les noms de tâches, tel qu'un hachage du contenu.
Si vous attribuez vos propres noms à des tâches, notez que leur longueur maximale est de 500 caractères, et qu'ils peuvent contenir des majuscules, des minuscules, des traits de soulignement et des traits d'union.
Étape suivante
- Apprenez à créer des gestionnaires de tâches.