标签: google-cloud-tasks

Google Cloud Tasks ImportError:无法导入名称“ resource_pb2”

尝试使用google提供的python示例代码将任务添加到Google Cloud Tasks队列。谷歌的文档在这里:https : //cloud.google.com/tasks/docs/creating-appengine-tasks

当我尝试执行端点时,出现以下错误:

ImportError:无法导入名称“ resource_pb2”

有没有人看到过类似的问题,并且知道如何解决这个问题?

在此先感谢您的时间 :)

-内森

我尝试将google-cloud-tasks,google-api,google-cloud添加到我的requirements.txt中,并在我的虚拟环境中运行pip install google-cloud-tasks。我也尝试使用此代码:

从google.cloud导入task_v2beta3

结果是一样的

这是谷歌提供的示例代码。我已向他们发送了一条便条,以使他们知道示例代码不起作用。

from google.cloud import tasks_v2
from google.protobuf import timestamp_pb2

# Create a client.
client = tasks_v2.CloudTasksClient()

# TODO(developer): Uncomment these lines and replace with your values.
# project = 'my-project-id'
# queue = 'my-appengine-queue'
# location = 'us-central1'
# payload = 'hello'

# Construct the fully qualified queue name.
parent = client.queue_path(project, location, queue)

# Construct the request body.
task = { …
Run Code Online (Sandbox Code Playgroud)

python google-app-engine google-cloud-tasks

2
推荐指数
1
解决办法
321
查看次数

将任务添加到 Google Cloud Tasks 时DEADLINE_EXCEEDED

DEADLINE_EXCEEDED从 Node.js 客户端将任务添加到 Google Cloud Tasks 时,我偶尔会收到错误消息。我只尝试在 for 循环中添加 17 个任务。不知道为什么这种情况偶尔会发生,有时却工作得很好!

这是详细的错误日志:

Error: 4 DEADLINE_EXCEEDED: Deadline exceeded
    at Object.callErrorFromStatus (/Users/gijo/Desktop/workspace/flying-press-server/node_modules/@grpc/grpc-js/build/src/call.js:30:26)
    at Object.onReceiveStatus (/Users/gijo/Desktop/workspace/flying-press-server/node_modules/@grpc/grpc-js/build/src/client.js:175:52)
    at Object.onReceiveStatus (/Users/gijo/Desktop/workspace/flying-press-server/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:341:141)
    at Object.onReceiveStatus (/Users/gijo/Desktop/workspace/flying-press-server/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:304:181)
    at Http2CallStream.outputStatus (/Users/gijo/Desktop/workspace/flying-press-server/node_modules/@grpc/grpc-js/build/src/call-stream.js:115:74)
    at Http2CallStream.maybeOutputStatus (/Users/gijo/Desktop/workspace/flying-press-server/node_modules/@grpc/grpc-js/build/src/call-stream.js:154:22)
    at Http2CallStream.endCall (/Users/gijo/Desktop/workspace/flying-press-server/node_modules/@grpc/grpc-js/build/src/call-stream.js:140:18)
    at Http2CallStream.cancelWithStatus (/Users/gijo/Desktop/workspace/flying-press-server/node_modules/@grpc/grpc-js/build/src/call-stream.js:443:14)
    at Timeout.<anonymous> (/Users/gijo/Desktop/workspace/flying-press-server/node_modules/@grpc/grpc-js/build/src/deadline-filter.js:59:28)
    at listOnTimeout (internal/timers.js:549:17) {
  code: 4,
  details: 'Deadline exceeded',
  metadata: Metadata { internalRepr: Map {}, options: {} }
}
Run Code Online (Sandbox Code Playgroud)

我以为我达到了一些配额。但经检查,均未超标。

在此输入图像描述

这是我创建队列的方式(更新插入):

const client = require('./client');

module.exports = async (queue_name, concurrent) => {
  return client.updateQueue({
    queue: …
Run Code Online (Sandbox Code Playgroud)

google-cloud-platform google-cloud-tasks

2
推荐指数
1
解决办法
7655
查看次数

获取错误类型错误:create_task() 需要 1 到 2 个位置参数,但在创建谷歌云任务时给出了 3 个

from google.cloud import tasks_v2

import json


GCP_PROJECT='test'
GCP_LOCATION='europe-west6'


def enqueue_task(queue_name, payload, process_url):
  client = tasks_v2.CloudTasksClient()
  parent = client.queue_path(GCP_PROJECT, GCP_LOCATION, queue_name)

  task = {
    'app_engine_http_request': {
      'http_method': 'POST',
      'relative_uri': process_url
    }
  }

  if payload is None:
    return False

  payload = json.dumps(payload)
  converted_payload = payload.encode()

  task['app_engine_http_request']['body'] = converted_payload
  return client.create_task(parent, task)
Run Code Online (Sandbox Code Playgroud)

当我尝试创建 Google Cloud 任务时,我不断收到以下错误。使用的 Google App Engine 运行时是 python38。它工作正常,但在使用 gcp CLI 部署后突然无法正常工作。

Traceback (most recent call last):
  File "/layers/google.python.pip/pip/flask/app.py", line 2447, in wsgi_app
    response = self.full_dispatch_request()
  File "/layers/google.python.pip/pip/flask/app.py", line 1952, in …
Run Code Online (Sandbox Code Playgroud)

python queue python-3.x google-cloud-platform google-cloud-tasks

2
推荐指数
1
解决办法
616
查看次数

谷歌云功能对大量任务进行排队

我正在尝试使用云函数通过每天调用外部 API 一次来更新数据。

到目前为止我有:

  • 云计划设置为调用功能 1

  • 功能 1 - 循环项目并为每个项目创建一个任务

  • 任务 - 使用函数 1 提供的数据调用函数 2

  • 功能2 - 调用外部API来获取数据并更新我们的数据库

问题是每天有大约 2k 项需要更新,而云函数在执行此操作之前会超时,因此我将它们放入队列中。但即使将项目放入队列中,云功能也会花费太长时间,因此在添加所有项目之前就会超时。

有没有一种简单的方法可以一次将多个任务批量添加到队列中?

如果做不到这一点,有更好的解决方案吗?

全部用python编写

函数1的代码:

def refresh(request):
    for i in items:
        # Create a client.
        client = tasks_v2.CloudTasksClient()

        # TODO(developer): Uncomment these lines and replace with your values.
        project = 'my-project'
        queue = 'refresh-queue'
        location = 'europe-west2'
        name = i['name'].replace(' ','')
        url = f"https://europe-west2-my-project.cloudfunctions.net/endpoint?name={name}"

        # Construct the fully qualified queue name.
        parent = client.queue_path(project, location, queue)

        # Construct the …
Run Code Online (Sandbox Code Playgroud)

python google-cloud-platform google-cloud-functions google-cloud-scheduler google-cloud-tasks

2
推荐指数
1
解决办法
1833
查看次数

是否有响应代码可将 Google Cloud 任务标记为永久失败,以便它不会重试?

我有一个 Firebase HTTPS 函数,可以发送定时消息并由 Google Cloud Tasks 触发。

根据 Cloud Tasks 文档,任何超出 200 范围的响应代码都将被视为失败,并将触发重试。

此功能需要扩展到每日数百万条消息,因此我们需要避免重试永久失败的消息(用户选择退出等)。

注意:这在此示例中尤其重要,因为每个任务都需要在处理之前查找最新信息,从而为每次尝试添加 2-10 个 Firestore 读取。我们无法在有效负载中发送此信息,因为它可能在消息排队和处理之间发生变化。

使用云任务 API 删除任务很容易,但我想知道是否有任何 HTTP 响应代码(或标头)可以将这些任务标记为永久失败(例如 400 错误请求)并且不重试它们。

google-cloud-functions google-cloud-firestore google-cloud-tasks

2
推荐指数
1
解决办法
2047
查看次数

选择您希望执行 Google 任务处理程序的服务

我对 Google Cloud Platform 比较陌生,我能够创建应用服务并管理数据库。我正在尝试在 Google Cloud Tasks 中创建一个处理程序(类似于本文档中找到的 NodeJS 示例) 。

但是,文档未能清楚地说明如何将已部署的服务与请求的内容连接起来。必要性要求我的项目中有多个服务(Node 中的一个用于管理休息,Python 中的另一个用于将地理空间数据作为异步任务进行管理)。

我的问题:运行多个服务时,Google Cloud Tasks 如何知道将任务定向到哪个服务?

下面的屏幕截图证明我能够向队列请求任务。

队列中运行的示例任务

google-cloud-platform google-cloud-tasks

0
推荐指数
1
解决办法
371
查看次数

无法从 Cloud Tasks HTTP 请求向 Cloud IAP 后端进行身份验证

我正在尝试使用 Cloud Tasks HTTP 请求到达受 Cloud IAP 保护的 HTTPS 负载均衡器后面的 Kubernetes 端点。

端点可以使用任何 Gsuite 公司帐户,但当云任务执行时,这是云审核 - 数据访问日志(仅显示重要部分)

authenticationInfo: {
}
authorizationInfo: [
  0: {
    permission: "iap.webServiceVersions.accessViaIAP"     
    resource: "projects/<PROJECT_NUMBER>/iap_web/compute/services/<SERVICE_NUMBER>/versions/bs_0"     
    resourceAttributes: {
      service: "iap.googleapis.com"      
      type: "iap.googleapis.com/WebServiceVersion"      
    }
  }
]

status: {
  code: 7    
  message: "PERMISSION_DENIED"    
}
Run Code Online (Sandbox Code Playgroud)

我正在使用计算引擎服务帐户来创建任务,因此我已授予该帐户适当的权限:

计算引擎服务帐户 iam

创建任务时,我将适当的 OIDC 服务帐户电子邮件添加到 http 请求中

'oidc_token': {'service_account_email': <PROJECT_NUMBER>-compute@developer.gserviceaccount.com}}
Run Code Online (Sandbox Code Playgroud)

我还检查了另一个端点上的 Cloud Tasks HTTP 请求,并且存在身份验证承载令牌。

我现在真的不知道如何让它发挥作用。谢谢您的帮助

google-iap google-cloud-tasks

0
推荐指数
1
解决办法
566
查看次数

云任务未按时运行

我想做的是在计划的时间使用云功能和云任务更改 firestore 中的数据。但云任务没有按时运行。添加任务后立即执行。

我的代码是这样的。

index.js

exports.addTasks = functions.https.onCall((data, context) => {
  const client = new tasks.CloudTasksClient()

  const projectId = ...
  const queue = ...
  const location = ...

  const parent = client.queuePath(projectId, location, queue)

  const url = ... .cloudfunctions.net/doSomething?docId=' + docId

  const task = {
    httpRequest: {
      httpMethod: 'POST',
      url: url,
      scheduleTime: {
        seconds: 3 * 60 + Date.now() / 1000,
      }, 
    }
  }

  const request = {
    parent: parent,
    task: task,
  }

  client.createTask(request)
})

exports.doSomething = functions.https.onRequest((req, res) => …
Run Code Online (Sandbox Code Playgroud)

google-cloud-platform google-cloud-functions google-cloud-tasks

0
推荐指数
1
解决办法
819
查看次数

是否可以使用 Node 以编程方式删除 Google Cloud Tasks?

根据有关删除任务和队列的文档,这可以在 Go、Java、Python 和 PHP 中完成。节点已禁用。

有没有办法使用 Node 来做到这一点?我已经使用节点创建任务。

node.js firebase google-cloud-tasks

0
推荐指数
1
解决办法
973
查看次数

为什么 Google Cloud 任务队列这么慢?

我有一个谷歌云任务队列,可以处理 1000 个 HTTP 请求(云函数)。我已使用默认设置设置任务队列,但更新的“最大尝试次数”= 2 除外

在此输入图像描述

每个任务都是使用 python 使用“from google.cloud importtasks_v2”包进行分派的。

我面临的问题是,完成处理队列中的所有任务需要太长时间,我希望设置“最大并发”= 1000 我会看到更多任务一次性运行?当刷新所有观察“正在运行的任务”指示器时,我只看到它最多为 15。

在此输入图像描述

在此输入图像描述

我是否错过了某些内容,或者是否可以使用其他设置来更快地处理这些任务?

google-cloud-platform google-cloud-tasks

0
推荐指数
1
解决办法
799
查看次数