Waiter in derAWS SDK for PHPVersion 3 - AWS SDK for PHP

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Waiter in derAWS SDK for PHPVersion 3

Waiter helfen dabei, mit eventuell konsistenten Systemen zu arbeiten, indem sie abstrahiert warten, bis eine Ressource in einen bestimmten Zustand gelangt, indem sie die Ressource abfragt. Eine Liste der Waiter, die von einem Client unterstützt werden, finden Sie imAPI-Dokumentationfür eine einzelne Version eines Serviceclients. Um dorthin zu navigieren, gehen Sie auf die Kundenseite in der API-Dokumentation und navigieren Sie zur spezifischen Versionsnummer (dargestellt durch ein Datum) und scrollen Sie nach unten zum Abschnitt „Kellner“. Dieser Link führt Sie zum Kellnerbereich von S3.

Im folgenden Beispiel wird mit dem Amazon S3 S3-Client ein Bucket erstellt. Dann wartet der Waiter, bis der Bucket existiert.

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

Wenn der Waiter den Bucket zu oft abfragen muss, wird eine \RuntimeException Ausnahme ausgelöst.

Waiter Konfiguration

Waiter werden von einem assoziativen Array von Konfigurationsoptionen gesteuert. Alle von einem bestimmten Waiter verwendeten Optionen haben Standardwerte, aber sie können außer Kraft gesetzt werden, um verschiedene Wartestrategien zu unterstützen.

Sie können die Waiter-Konfigurationsoptionen ändern, indem Sie ein assoziatives Array von @waiter -Optionen an das $args -Argument der waitUntil()- und getWaiter()-Methoden eines Clients übergeben.

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

Anzahl der Sekunden, die zwischen den Sendeversuchen verzögert werden Jeder Waiter hat einen Standardkonfigurationswertt delay, aber Sie müssen diese Einstellung möglicherweise für bestimmte Anwendungsfälle ändern.

maxAttempts (int)

Maximale Anzahl von Sendeversuchen, die vor dem Fehlschlagen des Waiters ausgeführt werden sollen. Diese Option stellt sicher, dass Sie nicht unbegrenzt auf eine Ressource warten. Jeder Waiter hat einen Standardkonfigurationswertt maxAttempts, aber Sie müssen diese Einstellung möglicherweise für bestimmte Anwendungsfälle ändern.

initDelay (int)

Zeit in Sekunden, die vor dem ersten Abrufversuch gewartet wird. Dies kann nützlich sein, wenn Sie auf eine Ressource warten, von der Sie wissen, dass sie eine Weile dauern wird, um in den gewünschten Zustand zu gelangen.

vor der Aktualisierung (abrufbar)

Eine abrufbare PHP-Funktion, die vor jedem Versuch aufgerufen wird. Das abrufbar wird mit dem Befehl Aws\CommandInterface, der gerade ausgeführt wird, und der Anzahl der bisher ausgeführten Versuche aufgerufen. Die Verwendung der aufrufbaren before könnte darin bestehen, Befehle zu modifizieren, bevor sie ausgeführt werden, oder Fortschrittsinformationen zur Verfügung zu stellen.

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

Asynchron warten

Zusätzlich zum synchronen Warten können Sie einen Waiter auffordern, asynchron zu warten, während er andere Anfragen sendet oder auf mehrere Ressourcen gleichzeitig wartet.

Sie können auf ein WaiterPromise zugreifen, indem Sie einen Waiter von einem Client mithilfe der getWaiter($name, array $args = [])-Methode des Clients abrufen. Verwenden Sie die promise()-Methode eines Waiters, um den Waiter zu initiieren. Ein WaiterPromise wird mit der letzten Aws\CommandInterface erfüllt, die im Waiter ausgeführt wurde, und mit einer RuntimeException im Fehlerfall abgelehnt.

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

Die Bereitstellung einer auf Promise basierenden Waiter-API ermöglicht einige leistungsstarke und relativ geringe Overhead-Anwendungsfälle. Zum Beispiel, was ist, wenn Sie auf mehrere Ressourcen warten und etwas mit dem ersten Waiter machen möchten, der erfolgreich gelöst wurde?

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