有没有一种方法可以覆盖针对单个调用在awsdk for php中的重试?
以下代码解释了问题:
// Create client with a default of 2 retries
$sqsClient = new sqsClient('2012-11-05', ['retries' => 2]);
// This will retry twice to get the queue attributes (perfect)
try {
$sqsClient->getQueueAttributes();
} catch(Exception $e) {
}
// I want the following to NEVER retry
try {
$sqsClient->turnOffRetryLogic(???);
$sqsClient->receiveMessages(['WaitTimeSeconds' => 5]);
} catch(Exception $e) {
}
// Now set the retries back to as before.
重试是由中间件来处理的——但是当中间件类被标记为“最终”时,我需要传递一个“决定符”?这意味着我们需要钩住其中一个处理程序,但似乎没有一个与重试连接。
编辑:
我通过直接编辑AWS SDK,成功证明了新“决策者”的概念,如下所示:
final class Middleware
{
public static function retry(
callable $decider = null,
callable $delay = null,
$stats = false
) {
....
$decider = function() {
echo 'retries cancelled';
return false;
};
....
所以问题是如何在不编辑SDK的情况下完成这项工作。已经尝试了如下各种中间件钩子,但没有成功。
$decider = function() {
echo 'No retries';
return false;
};
$SqsClient->getHandlerList()->appendSign(\AWS\Middleware::retry($decider, null), 'retry');
$result = $SqsClient->receiveMessage($aParams);
(代码样本截图仅显示相关部分)