Как переопределить конфигурацию повторных попыток для клиента облачных задач Google Node.js - PullRequest
0 голосов
/ 08 апреля 2019

Я пытался выяснить, есть ли способ повторить функцию createTask .Причина в том, что я продолжаю время от времени сталкиваться с ошибкой превышения крайнего срока, например, так:

Ошибка: 4 DEADLINE_EXCEEDED: Превышен крайний срок в Object.exports.createStatusError (/ srv / node_modules / grpc / src/common.js:91:15) в Object.onReceiveStatus (/srv/node_modules/grpc/src/client_interceptors.js:1204:28) в InterceptingListener._callNext (/srv/node_modules/grpc/s_inter_client.js): 42) в InterceptingListener.onReceiveStatus (/srv/node_modules/grpc/src/client_interceptors.js:618:8) при обратном вызове (/srv/node_modules/grpc/src/client_interceptors.js:845:247)*

Читая код позади функции createTask, я обнаружил, что время ожидания по умолчанию конфигурация составляло всего 10 секунд.

В данный момент я пытался увеличить время ожидания до30-х годов (что я считаю, максимум), делая это:

try {
  console.log("Sending task %j", task);
  const callOptions = {
    timeout: 30000
  };
  // Send create task request.
  const [response] = await client.createTask(request, callOptions);
  const name = response.name;
  console.log(`Created task ${name}`);
} catch (error) {
  console.error("CREATE_TASK_ERROR::", error);
}

И, похоже, это работает.Однако я также хотел бы рассмотреть случай, если API не смог ответить в течение 30 секунд.

Я пробовал этот код:

try {
  console.log("Sending task %j", task);
  const callOptions = {
    timeout: 2000, // I've set it to 2 seconds to be able to reproduce the deadline exceeded error easily
    retry: {
      initial_retry_delay_millis: 100,
      retry_delay_multiplier: 1.3,
      max_retry_delay_millis: 60000,
      initial_rpc_timeout_millis: 20000,
      rpc_timeout_multiplier: 1.0,
      max_rpc_timeout_millis: 20000,
      total_timeout_millis: 300000
    }
  };
  // Send create task request.
  const [response] = await client.createTask(request, callOptions);
  const name = response.name;
  console.log(`Created task ${name}`);
} catch (error) {
  console.error("CREATE_TASK_ERROR::", error);
}

Но я не могуувидеть повторную попытку createTask.Но, основываясь на комментарии здесь , мы сможем изменить настройки по умолчанию, включая повторные попытки.

Что я делаю не так?Пожалуйста, помогите.

1 Ответ

0 голосов
/ 19 апреля 2019

Кажется, что callOptions - это неправильно.

  const callOptions = {
    timeout: 2000, // I've set it to 2 seconds to be able to reproduce the deadline exceeded error easily
    retry: {
      backoffSettings: {
        initialRetryDelayMillis: 100,
        retryDelayMultiplier: 1.3,
        maxRetryDelayMillis: 60000,
        initialRpcTimeoutMillis: 20000,
        // rpc_timeout_multiplier: 1.0,  not exists
        maxRpcTimeoutMillis: 20000,
        totalTimeoutMillis: 300000
      }
    }
  };

См:

Но я думаю, что лучше установить параметры повтора с помощью cli.

См .:

...