我在找人帮忙!我正在做一个小项目,该项目涉及将消息发布到Google /Sub主题,并使用“push”订阅来触发云运行HTTPS服务。我遇到的问题是,Ack关于“推送”订阅的最后期限似乎没有得到遵守。我看到同一条消息在云运行服务中生成多个容器,即使在第一次运行时还没有达到Ack最后期限或请求超时。我只想要一条消息产生一个容器一次完成(返回200确定)。
当前流量(发行):
预期流量(我想要的):
订阅说明:
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附加信息:--我是根据本教程工作的:https://cloud.google.com/run/docs/tutorials/pubsub
为了模拟120秒钟的工作,我在Pub/Sub教程代码中添加了一个睡眠函数:
https://github.com/cvasq/golang-samples/commit/fa2286d4395d31b5eca12d73dd24187042211124
当前的解决方案:将每个容器的最大容器数和最大请求设置为1。这允许一次只处理来自主题的一条消息。
有人能提供一些关于为什么会发生这种情况的建议吗?配置似乎是正确的,但我可能遗漏了什么。
发布于 2020-03-03 00:22:26
我能够通过在命令行重新创建pubsub订阅和云运行服务来解决我的问题,并提供了所需的最后期限和并发配置。
第一次在命令行创建订阅和云运行服务时,我更改了Google中的Ack截止日期。我怀疑由于某种原因,这一变化并没有影响Google后端。
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 10https://stackoverflow.com/questions/60494164
复制相似问题