Waiter nell'AWS SDK for PHPVersione 3 - AWS SDK for PHP

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Waiter nell'AWS SDK for PHPVersione 3

I waiter aiutano a semplificare il lavoro con sistemi con coerenza finale fornendo un modo astratto per attendere che una risorsa entri in uno stato specifico effettuando il polling della risorsa. Puoi trovare un elenco di waiter supportati da un clientDocumentazione APIper una singola versione di un service client. Per navigare lì, vai alla pagina del cliente nella documentazione dell'API e vai al numero di versione specifico (rappresentato da una data) e scorri verso il basso fino alla sezione «Camerieri». Questo link ti porterà alla sezione camerieri di S3.

In questo esempio il client Amazon S3 viene utilizzato per creare un bucket. Quindi il waiter viene utilizzato per attendere fino all'esistenza del bucket.

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

Se il waiter deve eseguire il polling del bucket troppe volte, genera un'eccezione \RuntimeException.

Configurazione waiter

I waiter sono guidati da un array associativo di opzioni di configurazione. Tutte le opzioni utilizzate da un determinato waiter dispongono di valori predefiniti, ma essi possono essere sovrascritti per supportare diverse strategie di attesa.

È possibile modificare le opzioni di configurazione del waiter trasferendo un array associativo di opzioni @waiter all'argomento $args di un metodo di client waitUntil() e getWaiter().

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

Numero di secondi di ritardo tra i tentativi di polling. Ogni waiter ha un valore di configurazione predefinito delay ma potrebbe non essere necessario modificare questa impostazione per casi d'uso specifici.

maxAttempts (int)

Il numero massimo di tentativi di polling da emettere prima che il waiter abbia esito negativo. Questa opzione garantisce che non si debba attendere una risorsa a tempo indeterminato. Ogni waiter ha un valore di configurazione predefinito maxAttempts ma potrebbe non essere necessario modificare questa impostazione per casi d'uso specifici.

initDelay (int)

Quantità di tempo di attesa in secondi prima del primo tentativo di polling. Questo può essere utile quando si attende una risorsa che richiederà qualche minuto prima di entrare nello stato desiderato.

before (callable)

Una funzione PHP richiamabile che viene richiamata prima di ogni tentativo. La funzione richiamabile viene richiamata con il comando Aws\CommandInterface che sta per essere eseguito e il numero di tentativi eseguiti fino a ora. L'utilizzo della funzione richiamabile before potrebbe modificare i comandi prima che vengano eseguiti oppure fornire le informazioni sullo stato di avanzamento.

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 ); } ] ]);

Attesa in modo asincrono

Oltre ad attendere in modo sincrono, è possibile richiamare un waiter per l'attesa in modo asincrono durante l'invio di altre richieste oppure attendere più risorse contemporaneamente.

È possibile accedere a una promessa di waiter recuperando un waiter da un client con il metodo getWaiter($name, array $args = []) del client. Utilizza il metodo promise() di un waiter per inizializzare il waiter. Una promessa da parte di un waiter viene soddisfatta con l'ultimo Aws\CommandInterface che è stato eseguito nel waiter e rifiutata con un RuntimeException in caso di errore.

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'esposizione di una API di waiter basati su promessa consente alcuni casi d'uso potenti e con costi di gestione relativamente bassi. Ad esempio, cosa fare se si desidera attendere più risorse e si interviene con il primo waiter che si è risolto correttamente?

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();