Programmes d'attente du kitAWS SDK for PHPVersion 3 - AWS SDK for PHP

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Programmes d'attente du kitAWS SDK for PHPVersion 3

Les programmes d’attente facilitent les opérations avec les systèmes basés sur la cohérence à terme. Ils offrent une méthode abstraite qui permet de patienter jusqu’à ce qu’une ressource entre dans un état particulier en interrogeant la ressource. Pour connaître les programmes d'attente pris en charge par un client, consultez leDocumentation sur les APIpour une version unique d'un client de service. Pour y accéder, rendez-vous sur la page du client dans la documentation de l'API, accédez au numéro de version spécifique (représenté par une date) et faites défiler la page vers le bas jusqu'à la section « Serveurs ». Ce lien vous amènera à la section programmes d'attente de S3.

Dans l'exemple suivant, le client Amazon S3 est utilisé pour créer un compartiment. Le serveur est ensuite utilisé pour patienter jusqu'à ce que le compartiment existe.

// Create a bucket $s3Client->createBucket(['Bucket' => 'my-bucket']); // Wait until the created bucket is available $s3Client->waitUntil('BucketExists', ['Bucket' => 'my-bucket']);

Si le programme d'attente dépasse un certain nombre d'interrogations du compartiment, il lève une exception \RuntimeException.

Configuration du programme d'attente

Les programmes d'attente sont gérés par un tableau associatif d'options de configuration. Toutes les options utilisées par un programme d'attente spécifique possèdent des valeurs par défaut. Ces valeurs peuvent toutefois être remplacées pour prendre en charge d'autres stratégies d'attente.

Vous pouvez modifier les options de configuration du programme d'attente en transmettant un tableau associatif d'options @waiter à l'argument $args des méthodes waitUntil() et getWaiter() d'un client.

// Providing custom waiter configuration options to a waiter $s3Client->waitUntil('BucketExists', [ 'Bucket' => 'my-bucket', '@waiter' => [ 'delay' => 3, 'maxAttempts' => 10 ] ]);
delay (int)

Durée d'attente entre deux tentatives d'interrogation (en secondes). Chaque programme d'attente possède une valeur de configuration delay par défaut, que vous devrez peut-être modifier selon vos cas d'utilisation spécifiques.

maxAttempts (int)

Nombre maximal de tentatives d'interrogation à émettre avant l'échec du programme d'attente. Cette option vous permet de ne pas attendre une ressource indéfiniment. Chaque programme d'attente possède une valeur de configuration maxAttempts par défaut, que vous devrez peut-être modifier selon vos cas d'utilisation spécifiques.

initDelay (int)

Durée d'attente avant la première tentative d'interrogation (en secondes). Cette valeur peut s'avérer utile si vous savez que la ressource que vous attendez mettra un certain temps à atteindre l'état souhaité.

before (callable)

Fonction PHP de type callable appelée avant chaque tentative. La fonction est appelée à l'aide de la commande Aws\CommandInterface sur le point d'être exécutée, selon le nombre de tentatives qui ont déjà été exécutées. La fonction de type callable before permet de modifier des commandes avant leur exécution ou de fournir des informations d'avancement.

use Aws\CommandInterface; $s3Client->waitUntil('BucketExists', [ 'Bucket' => 'my-bucket', '@waiter' => [ 'before' => function (CommandInterface $command, $attempts) { printf( "About to send %s. Attempt %d\n", $command->getName(), $attempts ); } ] ]);

Attente asynchrone

En plus de l'attente synchrone, vous pouvez demander à un programme d'attente d'effectuer une attente asynchrone lors de l'envoi d'autres requêtes ou en cas d'attente de plusieurs ressources en même temps.

Vous pouvez accéder à une promesse de programme d'attente en récupérant un programme d'attente à partir d'un client à l'aide de la méthode getWaiter($name, array $args = []) du client. Utilisez la méthode promise() d'un programme d'attente pour démarrer ce dernier. Une promesse de programme d'attente est exécutée avec la dernière occurrence de Aws\CommandInterface exécutée dans le programme d'attente, ou rejetée avec RuntimeException en cas d'erreur.

use Aws\CommandInterface; $waiterName = 'BucketExists'; $waiterOptions = ['Bucket' => 'my-bucket']; // Create a waiter promise $waiter = $s3Client->getWaiter($waiterName, $waiterOptions); // Initiate the waiter and retrieve a promise $promise = $waiter->promise(); // Call methods when the promise is resolved. $promise ->then(function () { echo "Waiter completed\n"; }) ->otherwise(function (\Exception $e) { echo "Waiter failed: " . $e . "\n"; }); // Block until the waiter completes or fails. Note that this might throw // a \RuntimeException if the waiter fails. $promise->wait();

L'exposition d'une API de programme d'attente basée sur des promesses permet de mettre en œuvre des cas d'utilisation puissants avec une surcharge relativement faible. Imaginons par exemple que vous souhaitiez attendre plusieurs ressources et agir avec le premier programme d'attente résolu avec succès.

use Aws\CommandInterface; // Create an array of waiter promises $promises = [ $s3Client->getWaiter('BucketExists', ['Bucket' => 'a'])->promise(), $s3Client->getWaiter('BucketExists', ['Bucket' => 'b'])->promise(), $s3Client->getWaiter('BucketExists', ['Bucket' => 'c'])->promise() ]; // Initiate a race between the waiters, fulfilling the promise with the // first waiter to complete (or the first bucket to become available) $any = Promise\any($promises) ->then(function (CommandInterface $command) { // This is invoked with the command that succeeded in polling the // resource. Here we can know which bucket won the race. echo "The {$command['Bucket']} waiter completed first!\n"; }); // Force the promise to complete $any->wait();