google-cloud-platform - Google Pub/Sub + Cloud Run 生成多个容器

标签 google-cloud-platform google-cloud-pubsub google-cloud-run

我正在寻求帮助! 我正在开发一个小项目,该项目涉及向 Google Pub/Sub 主题发布消息并使用“推送”订阅来触发 Cloud Run HTTPS 服务。 我遇到的问题是“推送”订阅的确认截止日期似乎没有得到遵守。我看到同一条消息在 Cloud Run 服务中生成多个容器,即使首次运行时尚未达到确认截止时间或请求超时。我只希望 1 条消息生成 1 个容器一次完成(返回 200 OK)。

当前流程(问题):

  1. 消息已发布到 pubsub 主题
  2. “推送”订阅(确认截止时间为 600 秒)将消息转发到 Cloud Run HTTPS 服务端点(请求超时时间为 600 秒)
  3. Cloud Run 服务开始处理此消息,此工作需要 120 秒
  4. 在处理过程中,同一条消息会重新触发一个新的 Cloud Run 服务容器(每 10 秒一次,直到第一个容器完成),从而为同一条消息生成多个容器。
  5. 第一个 Cloud Run 容器完成后,不会启动新的 Cloud Run 容器,并且每 10 秒停止接收一次消息。

Screenshot

预期流量(我想要的):

  1. 消息已发布到 pubsub 主题
  2. “推送”订阅(确认截止时间为 600 秒)将消息转发到 Cloud Run HTTPS 服务端点(请求超时时间为 600 秒)
  3. Cloud Run Service 仅使用 1 个容器处理此消息 120 秒。任何新消息都应在单独的容器上启动。
  4. Cloud Run 服务在 600 秒确认期限内完成处理,并且不会为同一消息生成新容器。

订阅说明:

gcloud pubsub subscriptions describe myBuildSubscription
ackDeadlineSeconds: 600
expirationPolicy: {}
messageRetentionDuration: 87000s
name: projects/myproject-12345/subscriptions/myBuildSubscription
pushConfig:
  oidcToken:
    serviceAccountEmail: <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="62010e0d17064f10170c4f1217001117004f0b0c140d090710220f1b12100d080701164f53505156574c0b030f4c05110710140b01070301010d170c164c010d0f" rel="noreferrer noopener nofollow">[email protected]</a>
  pushEndpoint: https://my-project-example-ue.a.run.app
topic: projects/myproject-12345/topics/my_build_queue

其他信息: 我正在根据本教程进行工作:https://cloud.google.com/run/docs/tutorials/pubsub

我在 Pub/Sub 教程代码中添加了一个 sleep 函数,以模拟 120 秒的工作:

https://github.com/cvasq/golang-samples/commit/fa2286d4395d31b5eca12d73dd24187042211124

当前解决方法: 将最大容器数和每个容器的最大请求数设置为 1。这允许一次仅处理来自主题的 1 条消息。

任何人都可以提供一些关于为什么会发生这种情况的指示吗?配置看起来是正确的,但我可能遗漏了一些东西。

最佳答案

我能够通过在命令行上使用所需的截止日期和并发配置重新创建 pubsub 订阅和云运行服务来解决我的问题。

我第一次在命令行创建订阅和云运行服务,后来在 Google Cloud UI 中更改了确认截止时间。我怀疑由于某种原因,Google Cloud 后端没有进行此更改。

gcloud pubsub subscriptions create mySubscription --topic projects/myproject-123456/topics/build_queue --push-endpoint=https://myservice-ue.a.run.app --push-auth-service-account=cloud-run-pubsub-invoker@myproject-123456.iam.gserviceaccount.com --ack-deadline 600


gcloud run deploy --memory 2Gi site-build --image gcr.io/myproject-123456/site-builder --concurrency 1 --max-instances 10

关于google-cloud-platform - Google Pub/Sub + Cloud Run 生成多个容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60494164/

相关文章:

python - 如何在 Google Cloud Run 中生成 Blob 签名 url?

google-cloud-platform - Google Cloud Run - 使用 Eventarc API 触发(资源名称语法)

google-cloud-platform - 从本地 Cloud Run Emulator 连接到在 Docker (Redis) 中运行的容器

python-3.x - 无法将 algoliasearch 导入我的 lib 文件夹

google-cloud-platform - 是否有适用于 Cloud SQL PostgreSQL 的逻辑解码插件?

design-patterns - 用于多个生产者和多个消费者的 Redis pub sub

java - Google pubsub异步java API干净关闭

google-cloud-pubsub - 有没有一种方法可以配置Google Cloud Pub/Sub的保留期?

google-cloud-platform - 服务账户 <service-account-name>@<project-name>.iam.gserviceaccount.com 的 IAM 权限被拒绝

google-cloud-platform - 您可以使用 Google HTTPS 负载均衡器强制使用 http/1.1 吗?