Google cloud platform 谷歌发布/订阅+;云运行生成多个容器

Google cloud platform 谷歌发布/订阅+;云运行生成多个容器,google-cloud-platform,google-cloud-pubsub,google-cloud-run,Google Cloud Platform,Google Cloud Pubsub,Google Cloud Run,我在找人帮忙! 我正在从事一个小项目,该项目涉及将消息发布到Google发布/订阅主题,并使用“推送”订阅触发云运行的HTTPS服务。 我遇到的问题是,“推送”订阅的确认截止日期似乎没有得到遵守。我看到同一条消息在云运行服务中生成多个容器,即使在第一次运行时还没有达到确认截止日期或请求超时。我只希望一条消息生成一个容器一次完成(返回200 OK) 当前流量(问题): 将消息发布到pubsub主题 “推送”订阅(Ack截止时间为600秒)将消息转发到云运行的HTTPS服务端点(请求超时为600秒)

我在找人帮忙! 我正在从事一个小项目,该项目涉及将消息发布到Google发布/订阅主题,并使用“推送”订阅触发云运行的HTTPS服务。 我遇到的问题是,“推送”订阅的确认截止日期似乎没有得到遵守。我看到同一条消息在云运行服务中生成多个容器,即使在第一次运行时还没有达到确认截止日期或请求超时。我只希望一条消息生成一个容器一次完成(返回200 OK)

当前流量(问题):

  • 将消息发布到pubsub主题
  • “推送”订阅(Ack截止时间为600秒)将消息转发到云运行的HTTPS服务端点(请求超时为600秒)
  • 云运行服务开始处理此消息,此工作需要120秒
  • 在处理过程中,同一消息会重新触发一个新的云运行服务容器(每10秒一次,直到第一个容器完成),为同一消息生成多个容器
  • 一旦第一个Cloud Run容器完成,就不会启动新的Cloud Run容器,并且每隔10秒就会停止接收消息
  • 预期流量(我想要的):

  • 将消息发布到pubsub主题
  • “推送”订阅(Ack截止时间为600秒)将消息转发到云运行的HTTPS服务端点(请求超时为600秒)
  • 云运行服务仅使用一个容器处理此消息120秒。任何新消息都应在单独的容器中启动
  • 云运行服务在600秒确认截止日期内完成处理,并且不会为同一消息生成新容器
  • 订阅说明:

    gcloud pubsub subscriptions describe myBuildSubscription
    ackDeadlineSeconds: 600
    expirationPolicy: {}
    messageRetentionDuration: 87000s
    name: projects/myproject-12345/subscriptions/myBuildSubscription
    pushConfig:
      oidcToken:
        serviceAccountEmail: cloud-run-pubsub-invoker@myproject-12345.iam.gserviceaccount.com
      pushEndpoint: https://my-project-example-ue.a.run.app
    topic: projects/myproject-12345/topics/my_build_queue
    
    其他信息: 我的工作基于本教程:

    为了模拟120秒的工作时间,我在发布/订阅教程代码中添加了睡眠功能:

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


    有人能提供一些关于为什么会发生这种情况的建议吗?配置似乎正确,但我可能遗漏了一些内容。

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

    我第一次在命令行创建订阅和云运行服务,后来在谷歌云用户界面中更改了确认截止日期。我怀疑出于某种原因,谷歌云后端没有出现这种变化

    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
    

    您的问题中没有代码,因此我们只能猜测。确保日志显示每10秒重新发送一次相同的消息id。最有可能的问题是您无意中收到了邮件。请记住,推送订阅没有明确的ack/nack。成功代码被视为ack,而4xx/5xx错误代码将导致重新传递消息。我建议您检查您的调用响应。您好@JohnHanley,谢谢您的关注。有一个Github链接指向我用来复制问题的代码。我也有同样的问题。我后来改变了最后期限。我会尝试你的建议并尽快分享我的反馈。谢谢