如何为Amazon AWS Bedrock的invokeModel设置并检测超时?
AWS Bedrock Runtime invokeModel 超时设置与异常处理
两种超时设置方式
1. 客户端实例化时全局设置(所有请求生效)
在客户端配置中添加http参数,指定全局超时时间:
$bedrockRuntimeClient = new BedrockRuntimeClient([ 'version' => 'latest', 'region' => $region, 'credentials' => [ 'key' => $accessKey, 'secret' => $secretKey, ], 'http' => [ 'timeout' => 10, // 全局请求超时(单位:秒) 'connect_timeout' => 5 // 可选,TCP连接超时时间 ] ]);
2. 单个invokeModel请求单独设置(覆盖全局)
在invokeModel的参数中通过@http指定该请求的超时:
$result = $bedrockRuntimeClient->invokeModel([ 'contentType' => 'application/json', 'body' => json_encode($body), 'modelId' => $modelId, '@http' => [ 'timeout' => 15, // 此请求单独设置15秒超时 'connect_timeout' => 5 ] ]);
超时检测与后续逻辑处理
AWS SDK for PHP会在超时发生时抛出Aws\Exception\AwsException,该异常包装了底层Guzzle的超时类(ConnectException为连接超时,TimeoutException为请求超时)。通过捕获异常并判断类型,即可执行后续降级逻辑:
try { $result = $bedrockRuntimeClient->invokeModel([ 'contentType' => 'application/json', 'body' => json_encode($body), 'modelId' => $modelId, '@http' => [ 'timeout' => 10 ] ]); // 正常处理返回结果 $responseData = json_decode((string)$result['body'], true); } catch (\Aws\Exception\AwsException $e) { $rootException = $e->getPrevious(); // 判断是否为超时类异常 if ($rootException instanceof \GuzzleHttp\Exception\TimeoutException || $rootException instanceof \GuzzleHttp\Exception\ConnectException) { // 超时触发,执行备用逻辑 echo "请求超时,启动降级处理"; // 调用自定义备用函数 // yourFallbackFunction(); } else { // 处理其他AWS服务异常 echo "AWS请求错误: " . $e->getMessage(); } } catch (\Exception $e) { // 处理其他未知异常 echo "系统错误: " . $e->getMessage(); }
内容的提问来源于stack exchange,提问作者toto_tata
相关产品推荐
相关产品推荐

