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.
Kellner in der AWS SDK for PHP Version 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 von einem Client unterstützten Kellner finden Sie in der APIDokumentation für eine einzelne Version eines Service-Clients. Um dorthin zu gelangen, gehen Sie zur Kundenseite in der API Dokumentation, gehen Sie zu der spezifischen Versionsnummer (dargestellt durch ein Datum) und scrollen Sie nach unten zum Abschnitt „Kellner“. Über diesen Link gelangen Sie zum Bereich Kellner von S3.
Im folgenden Beispiel wird der Amazon S3 S3-Client verwendet, um einen Bucket zu erstellen. Dann wartet der Waiter, bis der Bucket existiert.
// 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']);
Wenn der Waiter den Bucket zu oft abfragen muss, wird eine \RuntimeException
Ausnahme ausgelöst.
Konfiguration für Kellner
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' => 'amzn-s3-demo-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 (Ganzzahl)
-
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 PHP aufrufbare 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 aufrufbarenbefore
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' => 'amzn-s3-demo-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' => '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();
Die Bereitstellung von Kellnern, die auf Versprechen basieren, API ermöglicht einige leistungsstarke Anwendungsfälle mit relativ geringem Aufwand. 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();