是否可以将waituntilDBInstanceAvailable()注册回调函数?

时间:2013-09-17 10:40:24

标签: php amazon-web-services rds

我正在使用AWS SDK for PHP,并且有一个命令行工具,等待使用waitUntilDBInstanceAvailable()创建数据库实例:

$this->rdsClient->waitUntilDBInstanceAvailable([
    'DBInstanceIdentifier' => 'test'
]);

有没有办法注册一个回调函数,所以每次SDK轮询RDS时,都会调用我的回调函数?

类似的东西:

$this->rdsClient->waitUntilDBInstanceAvailable([
    'DBInstanceIdentifier' => 'test',
    'CallbackFunction'     => function() {
        echo '.';
    }
]);

这会给用户一些关于脚本仍在等待的事情的反馈,并且没有任意挂起。

医生说:

  

输入数组使用DescribeDBInstances操作的参数和服务员特定的设置

但我无法找出这些服务员特定设置的内容。

2 个答案:

答案 0 :(得分:1)

您可以通过实施custom waiter来完成您所需要的工作。不幸的是,它不像支持现有服务员的回调那么简单,但你仍然可以实现你正在寻找的东西。

答案 1 :(得分:1)

有一个page specifically about waiters in the AWS SDK for PHP User Guide。在该页面上,它讨论了如何将事件监听器与服务员一起使用。您需要直接与服务员对象进行交互。

// 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.