Maison >développement back-end >tutoriel php >Tâches asynchrones et planification à l'aide de PHP et Google Cloud Tasks

Tâches asynchrones et planification à l'aide de PHP et Google Cloud Tasks

王林
王林original
2023-06-25 12:51:111409parcourir

Qu'il s'agisse d'une application en ligne ou de tâches de traitement hors ligne, le traitement et la planification des tâches asynchrones sont très importants pour les applications Web qui gèrent diverses tâches. Afin de mieux gérer les tâches, de maintenir l'évolutivité des applications Web et d'améliorer les performances des applications, nous devons nous appuyer sur le traitement et la planification asynchrones des tâches.

Google Cloud Tasks est un service entièrement géré qui facilite l'exécution de tâches périodiques et asynchrones via des appels API. Cet article vous montrera comment implémenter des tâches et une planification asynchrones à l'aide de PHP et Google Cloud Tasks. Nous apprendrons comment configurer Google Cloud Tasks et comment utiliser les files d'attente de tâches.

Avant de commencer, nous devons installer le SDK Google Cloud, configurer Google Cloud Tasks et créer un projet Google Cloud pour utiliser le service.

Installer le SDK Google Cloud

Le SDK Google Cloud est un outil de ligne de commande couramment utilisé pour gérer et exécuter des ressources cloud. Vous pouvez installer le SDK Google Cloud à l'aide de la commande suivante :

curl https://sdk.cloud.google.com | bash

Pendant le processus d'installation, vous devez suivre les invites à l'écran et saisir les informations de votre compte Google.

Configurer Google Cloud Tasks

Ensuite, nous devons configurer Google Cloud Tasks. Dans Cloud Tasks, une tâche se compose de trois éléments clés : la file d'attente des tâches, la tâche et l'exécuteur.

Une file d'attente de tâches est une ressource avec un nom spécifique qui vous permet de placer de nouvelles tâches. Les noms de files d’attente de tâches sont globalement uniques.

Les tâches sont des objets descriptifs que vous créez et ajoutez à une file d'attente de tâches.

L'exécuteur est le code réel appelé lors de l'exécution de la tâche, généralement situé dans votre application Web.

Dans ce tutoriel, nous utiliserons les valeurs suivantes :

  • ID du projet : mon-id-projet
  • ID de la file d'attente des tâches : ma-file d'attente
  • URL de la fonction Cloud : https://us-central1-my-project - id.cloudfunctions.net/processTask

Maintenant, configurons rapidement Cloud Tasks.

  1. Tout d'abord, nous devons activer l'API de tâches pour Cloud Tasks. Dans Cloud Console, sélectionnez le projet à partir duquel vous souhaitez configurer Cloud Tasks et accédez à API et services > Bibliothèques. Tapez « API Cloud Tasks » dans la zone de recherche et cliquez sur API Cloud Tasks pour l'activer.
  2. Ensuite, nous devons créer la file d'attente des tâches. Nous pouvons utiliser la commande gcloud suivante :
gcloud tasks queues create my-queue

Cette commande créera une file d'attente de tâches nommée my-queue. Si vous utilisez d'autres services, tels qu'App Engine ou Cloud Functions, vous pouvez les lier à cette file d'attente pour faciliter le traitement des tâches.

  1. Créez un exécuteur testamentaire. Dans ce didacticiel, nous utiliserons Cloud Functions comme exécuteur. Par conséquent, nous devons créer une fonction Cloud.

Dans Cloud Console, sélectionnez le projet à partir duquel vous souhaitez configurer Cloud Functions et accédez à Cloud Functions. Cliquez sur Créer une fonction et entrez le nom « processTask » pour la nouvelle fonction.

Nous utiliserons le code de fonction Cloud suivant :

<?php

use GoogleCloudStorageStorageClient;
use GoogleCloudLoggingLoggingClient;

function processTask($data, $context)
{
    $bucket = 'my-bucket';

    $logging = new LoggingClient(['projectId' => 'my-project-id']);
    $logger = $logging->psrLogger('my-logger');

    $logger->info('Starting task', ['data' => $data]);

    $storage = new StorageClient(['projectId' => 'my-project-id']);
    $bucket = $storage->bucket('my-bucket');

    // TODO: Process the task

    $logger->info('Task completed successfully.');
}

Cette fonction nécessite un accès à Google Cloud Storage, nous devons donc également lui accorder l'accès. Dans Cloud Console, accédez à Stockage > Parcourir. Ensuite, cliquez sur Créer un compartiment, sélectionnez le stockage standard pour le nouveau compartiment et saisissez le nom « mon-bucket ».

Dans l'onglet bucket, cliquez sur "Autorisations". Sélectionnez « Ajouter une entité » pour ajouter l'autorisation du programme « cloud-tasks@cloudtasks.googleapis.com » au service. Sous Sélectionner un rôle, dans la liste déroulante Rôle, sélectionnez Exécuteur de tâches Cloud Tasks.

La fonction Cloud est désormais prête à utiliser le code de partage de tâches.

  1. Créez des tâches. Nous pouvons maintenant créer des tâches pour la file d'attente des tâches. Nous utiliserons la commande gcloud suivante :
gcloud tasks create-http-task 
    --queue=my-queue 
    --url=https://us-central1-my-project-id.cloudfunctions.net/processTask 
    --http-method=POST 
    --body='{"message":"hello world"}'

À l'aide de la commande gcloud ci-dessus, nous créerons une requête POST au format JSON avec l'attribut "message" défini sur "hello world". Cette tâche sera ajoutée à la file d'attente my-queue.

C'est tout pour obtenir la configuration complète de Cloud Tasks.

Chargement de Cloud Tasks à l'aide de PHP

Maintenant que nous avons les paramètres pour Cloud Tasks, chargeons Cloud Tasks à l'aide de PHP. Google fournit un package PHP officiel appelé google/cloud-tasks. Vous pouvez l'installer en utilisant Composer :

composer require google/cloud-tasks

Nous pouvons maintenant écrire le code PHP pour créer la tâche et l'ajouter à la file d'attente des tâches. Regardons l'exemple suivant :

<?php

require_once __DIR__ . '/vendor/autoload.php';

use GoogleCloudTasksV2CloudTasksClient;
use GoogleCloudTasksV2HttpMethod;
use GoogleCloudTasksV2Queue;
use GoogleCloudTasksV2Task;
use GoogleProtobufDuration;

$projectId = 'my-project-id';
$location = 'us-central1';
$queueId = 'my-queue';

$cloudTasksClient = new CloudTasksClient();

$queueName = $cloudTasksClient->queueName($projectId, $location, $queueId);
$queue = new Queue();
$queue->setName($queueName);

$taskName = $cloudTasksClient->taskName($projectId, $location, $queueId, uniqid());
$task = new Task();
$task->setName($taskName);

$taskHttpReq = new GoogleCloudTasksV2HttpRequest();
$taskHttpReq->setUrl('https://us-central1-my-project-id.cloudfunctions.net/processTask');
$taskHttpReq->setHttpMethod(HttpMethod::POST);

$taskHttpReq->setBody(json_encode(['message' => 'hello world']));
$task->setHttpRequest($taskHttpReq);

$delay = new Duration();
$delay->setSeconds(10);
$task->setScheduleTime($delay);

$cloudTasksClient->createTask($queue, $task);

$cloudTasksClient->close();

Ce code créera une file d'attente de tâches appelée "my-queue". Ensuite, il crée une tâche et l'ajoute à la file d'attente. La tâche contient l'URL, la méthode HTTP et le corps de données de la requête POST.

La tâche contient également une heure planifiée pour que la tâche soit exécutée après 10 secondes.

Enfin, nous utilisons la méthode "createTask" pour ajouter la tâche à la file d'attente.

Résumé

Cet article vous montre comment implémenter la planification des tâches et le traitement des tâches asynchrones à l'aide de PHP et de Google Cloud Tasks. Cloud Tasks est un service entièrement géré qui facilite l'appel d'API qui effectuent des tâches périodiques et asynchrones. Nous avons mis en place une fonction Cloud, créé une file d'attente de tâches et ajouté des tâches à la file d'attente à l'aide de PHP.

Dans une application réelle, des fonctions et des services plus complexes peuvent être ajoutés, et davantage de files d'attente et de tâches peuvent être ajoutées selon les besoins. Cependant, cela devrait vous donner un bon point de départ pour intégrer Google Cloud Tasks dans votre application Web.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn