我需要在 Google Cloud 中关闭 http CloudTasksClient 吗?

Do I need to close http CloudTasksClient in Google Cloud?

我正在通过 http 使用 PHP 设置 Google Cloud Tasks,我不明白我是否需要关闭连接?

我正在寻找两个地方:

1) Docs

$client = new CloudTasksClient();
$queueName = $client->queueName($projectId, $locationId, $queueId);

$httpRequest = new HttpRequest();
$httpRequest->setUrl($url);
$httpRequest->setHttpMethod(HttpMethod::POST);
$task = new Task();
$task->setHttpRequest($httpRequest);
$response = $client->createTask($queueName, $task);

2) Gcloud Client Library

$cloudTasksClient = new CloudTasksClient();
try {
    $formattedParent = $cloudTasksClient->queueName('[PROJECT]', '[LOCATION]', '[QUEUE]');
    $task = new Task();
    $response = $cloudTasksClient->createTask($formattedParent, $task);
} finally {
    $cloudTasksClient->close();
}

我的版本:

$client = new CloudTasksClient();
try{
    $queueName = $client->queueName($projectId, $locationId, $queueId);
    $httpRequest = new HttpRequest();
    $httpRequest->setUrl($url);
    $httpRequest->setHttpMethod(HttpMethod::POST);
    $task = new Task();
    $task->setHttpRequest($httpRequest);
    $response = $client->createTask($queueName, $task);
}
catch(Exception $e){
    $this->logError("Error");
}
finally {
    $client->close();  <-- ???????? ( Do I need this )
}

我正在使用 App Engine,如果有任何不同的话。

通常 close() 语句是为了优雅地结束连接资源,例如刷新挂起的数据和释放内存。

在查看代码时,close() 似乎做了以下事情:

  • 优雅地清理 in-progress RPC 调用
  • 释放一些内存资源
  • 目前似乎对 REST 调用没有影响
  • 为未来创建一个 space,Cloud Tasks-specific 拆解活动

作为最佳实践,应该这样做。但是,如果您的 PHP 脚本非常专注于 Cloud Tasks 交互,那么它的影响似乎有限。

遍历代码

正在查看 Cloud Tasks client code, it appears the close method is defined in the GapicClientTrait

原来这个语句是传输的直通:

    /**
     * Initiates an orderly shutdown in which preexisting calls continue but new
     * calls are immediately cancelled.
     *
     * @experimental
     */
    public function close()
    {
        $this->transport->close();
    }

code for available transports 有 REST 和 gRPC 选项。

HttpUnaryTransportTrait 的 REST 之后,这似乎是 no-op:

    public function close()
    {
        // Nothing to do.
    }

跟随 gRPC 到 Grpc\BaseStub 我们到达了 gRPC client implementation