Я использую AWS SDK для PHP и имею инструмент командной строки, ожидающий создания экземпляра базы данных с помощью waitUntilDBInstanceAvailable () :
$this->rdsClient->waitUntilDBInstanceAvailable([ 'DBInstanceIdentifier' => 'test' ]);
Есть ли способ зарегистрировать функцию обратного вызова, так что каждый раз, когда SDK опрашивает RDS, вызывается моя функция обратного вызова?
Что-то вроде:
$this->rdsClient->waitUntilDBInstanceAvailable([ 'DBInstanceIdentifier' => 'test', 'CallbackFunction' => function() { echo '.'; } ]);
Это дало бы пользователю некоторую обратную связь о том, что сценарий все еще ждет и не зависает произвольно.
Док говорит:
Входной массив использует параметры операции DescribeDBInstances и конкретных настроек официанта
Но я не мог узнать, что это за настройки этого официанта .
В AWS SDK для руководства пользователя PHP есть страница, посвященная официантам . На этой странице он рассказывает о том, как использовать прослушиватели событий с официантами. Вам нужно напрямую взаимодействовать с объектом официанта.
// Get and configure the waiter object $waiter = $client->getWaiter('BucketExists') ->setConfig(array('Bucket' => 'my-bucket')) ->setInterval(10) ->setMaxAttempts(3); // Get the event dispatcher and register listeners for both events emitted by the waiter $dispatcher = $waiter->getEventDispatcher(); $dispatcher->addListener('waiter.before_attempt', function () { echo "Checking if the wait condition has been met…\n"; }); $dispatcher->addListener('waiter.before_wait', function () use ($waiter) { $interval = $waiter->getInterval(); echo "Sleeping for {$interval} seconds…\n"; }); $waiter->wait(); // Also Licensed under version 2.0 of the Apache License.
Вы можете делать то, что ищете, внедряя пользовательского официанта . К сожалению, это не так просто, как поддержка обратного вызова для существующего официанта, но вы все равно можете реализовать то, что ищете.