Нужно ли закрывать http CloudTasksClient в Google Cloud?

Я настраиваю Google Cloud Tasks с помощью PHP через http и не могу понять, нужно ли мне закрывать соединение или нет?

Я ищу два места:

1) Документы

$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

$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, если это имеет какое-либо значение.

1 ответ

Решение

Обычно оператор close() должен изящно обернуть ресурс соединения, такой как сброс ожидающих данных и освобождение памяти.

В обзоре кода, close() кажется, делает следующее:

  • Изящно убирать текущие вызовы RPC
  • Освободить некоторые ресурсы памяти
  • В настоящее время, похоже, не влияет на вызовы REST
  • Создайте пространство для будущих действий, связанных с облачными задачами

Как лучшая практика, это должно быть сделано. Тем не менее, если ваш PHP-скрипт довольно сильно сфокусирован на взаимодействии с облачными задачами, он может оказать ограниченное влияние.

Обход кода

Глядя на клиентский код Cloud Tasks, кажется, что метод close определен в GapicClientTrait.

Оказывается, это заявление является промежуточным для транспорта:

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

Код для доступных транспортов имеет опции для REST и gRPC.

После REST для HttpUnaryTransportTrait это выглядит как неработоспособность:

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

Следуя gRPC к Grpc\BaseStub, мы достигаем реализации клиента gRPC.

Другие вопросы по тегам