Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Camareros en la AWS SDK for PHP versión 3
Los esperadores facilitan el trabajo con sistemas de consistencia final proporcionando una forma abstracta de esperar hasta que un recurso pasa a un estado determinado sondeando el recurso. Puede encontrar una lista de los camareros admitidos por un cliente consultando la APIdocumentación de una sola versión de un cliente de servicio. Para acceder a ella, dirígete a la página del cliente en la API documentación, busca el número de versión específico (representado por una fecha) y desplázate hacia abajo hasta la sección «Camareros». Este enlace le llevará a la sección de esperadores de S3.
En el siguiente ejemplo, el cliente se utiliza el cliente de Amazon S3 para crear un bucket. A continuación, el esperador se utiliza para esperar hasta que exista el bucket.
// Create a bucket $s3Client->createBucket(['Bucket' => 'amzn-s3-demo-bucket']); // Wait until the created bucket is available $s3Client->waitUntil('BucketExists', ['Bucket' => 'amzn-s3-demo-bucket']);
Si el esperador tiene que sondear el bucket demasiadas veces, lanzará una excepción \RuntimeException
.
Configuración del esperador
Los esperadores actúan en función de una matriz asociativa de opciones de configuración. Todas las opciones que utiliza un esperador determinado tienen valores predeterminados, pero se pueden reemplazar por otros para aplicar estrategias de espera distintas.
Puede modificar las opciones de configuración de los esperadores pasando una matriz asociativa de opciones @waiter
al argumento $args
de los métodos waitUntil()
y getWaiter()
de un cliente.
// Providing custom waiter configuration options to a waiter $s3Client->waitUntil('BucketExists', [ 'Bucket' => 'amzn-s3-demo-bucket', '@waiter' => [ 'delay' => 3, 'maxAttempts' => 10 ] ]);
- delay (entero)
-
Es el número de segundos de retraso entre los intentos de sondeo. Cada esperador dispone de un valor de configuración
delay
predeterminado, pero es posible que tenga que modificarlo para casos de uso específicos. - maxAttempts (int)
-
Es el número máximo de intentos de sondeo a emitir antes de que el esperador falle. Esta opción garantiza que no tenga que esperar un recurso de forma indefinida. Cada esperador dispone de un valor de configuración
maxAttempts
predeterminado, pero es posible que tenga que modificarlo para casos de uso específicos. - initDelay (int)
-
Es el intervalo de tiempo en segundos que hay que esperar hasta el primer intento de sondeo. Esto puede ser útil cuando se espera a un recurso, del que se sabe que tarda un rato en pasar al estado deseado.
- before (invocable)
-
Una función PHP invocable que se invoca antes de cada intento. La función invocable se invoca con el comando
Aws\CommandInterface
que está a punto de ejecutarse y el número de intentos que se han ejecutado hasta el momento. La función invocablebefore
se puede utilizar para modificar los comandos antes de ejecutarlos o para proporcionar información de progreso.use Aws\CommandInterface; $s3Client->waitUntil('BucketExists', [ 'Bucket' => 'amzn-s3-demo-bucket', '@waiter' => [ 'before' => function (CommandInterface $command, $attempts) { printf( "About to send %s. Attempt %d\n", $command->getName(), $attempts ); } ] ]);
Espera asíncrona
Además de la espera síncrona, puede invocar un esperador para que espere de forma asíncrona mientras envía otras solicitudes o espera a varios recursos de forma simultánea.
Para obtener acceso a una promesa de un esperador, recupérelo de un cliente utilizando el método getWaiter($name, array $args = [])
del cliente. Utilice el método promise()
de un esperador para iniciarlo. Una promesa de esperador se cumple con la última Aws\CommandInterface
ejecutada en el esperador y rechazada con una excepción RuntimeException
al producirse un error.
use Aws\CommandInterface; $waiterName = 'BucketExists'; $waiterOptions = ['Bucket' => 'amzn-s3-demo-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();
Exponer a un camarero basado en promesas API permite algunos casos de uso potentes y con gastos relativamente bajos. Por ejemplo, ¿qué sucede si desea esperar a varios recursos y hacer algo con el primer esperador que se resuelva correctamente?
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();