Нужно ли закрывать http CloudTasksClient в Google Cloud? - PullRequest
0 голосов
/ 06 июля 2019

Я настраиваю 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 Ответ

2 голосов
/ 08 июля 2019

Обычно оператор 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 .

...