尝试使用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) 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) 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
我正在尝试使用云函数通过每天调用外部 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
我有一个 Firebase HTTPS 函数,可以发送定时消息并由 Google Cloud Tasks 触发。
根据 Cloud Tasks 文档,任何超出 200 范围的响应代码都将被视为失败,并将触发重试。
此功能需要扩展到每日数百万条消息,因此我们需要避免重试永久失败的消息(用户选择退出等)。
注意:这在此示例中尤其重要,因为每个任务都需要在处理之前查找最新信息,从而为每次尝试添加 2-10 个 Firestore 读取。我们无法在有效负载中发送此信息,因为它可能在消息排队和处理之间发生变化。
使用云任务 API 删除任务很容易,但我想知道是否有任何 HTTP 响应代码(或标头)可以将这些任务标记为永久失败(例如 400 错误请求)并且不重试它们。
google-cloud-functions google-cloud-firestore google-cloud-tasks
我对 Google Cloud Platform 比较陌生,我能够创建应用服务并管理数据库。我正在尝试在 Google Cloud Tasks 中创建一个处理程序(类似于本文档中找到的 NodeJS 示例) 。
但是,文档未能清楚地说明如何将已部署的服务与请求的内容连接起来。必要性要求我的项目中有多个服务(Node 中的一个用于管理休息,Python 中的另一个用于将地理空间数据作为异步任务进行管理)。
我的问题:运行多个服务时,Google Cloud Tasks 如何知道将任务定向到哪个服务?
下面的屏幕截图证明我能够向队列请求任务。
我正在尝试使用 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)
我正在使用计算引擎服务帐户来创建任务,因此我已授予该帐户适当的权限:
创建任务时,我将适当的 OIDC 服务帐户电子邮件添加到 http 请求中
'oidc_token': {'service_account_email': <PROJECT_NUMBER>-compute@developer.gserviceaccount.com}}
Run Code Online (Sandbox Code Playgroud)
我还检查了另一个端点上的 Cloud Tasks HTTP 请求,并且存在身份验证承载令牌。
我现在真的不知道如何让它发挥作用。谢谢您的帮助
我想做的是在计划的时间使用云功能和云任务更改 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
根据有关删除任务和队列的文档,这可以在 Go、Java、Python 和 PHP 中完成。节点已禁用。
有没有办法使用 Node 来做到这一点?我已经使用节点创建任务。
我有一个谷歌云任务队列,可以处理 1000 个 HTTP 请求(云函数)。我已使用默认设置设置任务队列,但更新的“最大尝试次数”= 2 除外
每个任务都是使用 python 使用“from google.cloud importtasks_v2”包进行分派的。
我面临的问题是,完成处理队列中的所有任务需要太长时间,我希望设置“最大并发”= 1000 我会看到更多任务一次性运行?当刷新所有观察“正在运行的任务”指示器时,我只看到它最多为 15。
我是否错过了某些内容,或者是否可以使用其他设置来更快地处理这些任务?