Google Cloud PubSub 禁用重试或设置最小值
Posted
技术标签:
【中文标题】Google Cloud PubSub 禁用重试或设置最小值【英文标题】:Google Cloud PubSub disable retrying or set a minimum 【发布时间】:2021-08-16 01:12:41 【问题描述】:我正在将 Cloud Scheduler 与 PubSub 和 Cloud Run 结合使用。
有时我的服务会被多次触发,即使我的服务在 Cloud Run 上运行成功响应(HTTP 204 无内容)也是如此。
我的服务用了大约 200 秒来响应 PubSub 发出的 POST。
我的问题是:如何限制 PubSub 的尝试次数?还是我犯了多个订阅之类的错误(我只有一个订阅,只是在控制台上检查过)?
奇怪的是,当我触发 Cloud Scheduler 时,PubSub 多次调用我的服务(见下面的截图)
我正在按如下方式部署我的 PubSub 和 Cloud Run:
export PROJECT_ID=...
export PROJECT_NUMBER=$(gcloud projects describe --format 'value(projectNumber)' $PROJECT_ID)
设置 Cloud Scheduler(每个项目只需执行一次)
gcloud pubsub topics create supervisor-cron --project $PROJECT_ID
创建 Pub/Sub 订阅
gcloud pubsub subscriptions create supervisor-subscription \
--topic supervisor-cron \
--project $PROJECT_ID
在https://console.cloud.google.com/cloudscheduler创建一个云调度器
启用 Pub/Sub 以在您的项目中创建身份验证令牌
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member=serviceAccount:service-$PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
--role=roles/iam.serviceAccountTokenCreator
创建或选择一个服务帐户来代表 Pub/Sub 订阅身份
gcloud iam service-accounts create cloud-run-pubsub-invoker \
--display-name "Cloud Run Pub/Sub Invoker" \
--project $PROJECT_ID
部署 Cloud Run
gcloud builds submit --tag gcr.io/$PROJECT_ID/supervisor --project $PROJECT_ID
gcloud run deploy supervisor \
--set-env-vars APP_BASEURL=$(gcloud run services describe anotherservice --format 'value(status.url)' --platform managed --project $PROJECT_ID) \
--set-env-vars APP_HEALTHCHECKS=https://hc-ping.com \
--platform managed \
--no-allow-unauthenticated \
--timeout=900 \
--image gcr.io/$PROJECT_ID/supervisor \
--project $PROJECT_ID
使用服务帐号创建 Pub/Sub 订阅
gcloud run services add-iam-policy-binding supervisor \
--member=serviceAccount:cloud-run-pubsub-invoker@$PROJECT_ID.iam.gserviceaccount.com \
--role=roles/run.invoker \
--platform managed \
--project $PROJECT_ID
gcloud pubsub subscriptions create supervisor-subscription \
--topic supervisor-cron \
--push-endpoint=$(gcloud run services describe supervisor --format 'value(status.url)' --platform managed --project $PROJECT_ID) \
--push-auth-service-account=cloud-run-pubsub-invoker@$PROJECT_ID.iam.gserviceaccount.com
【问题讨论】:
【参考方案1】:您需要延长 PubSub 订阅中的 ACK 截止日期。
在创建时添加此参数。最大值为 600 秒(10 分钟)。
--ack-deadline=600
您还可以设置其他参数来设置每次重试之间的延迟、最大重试次数等。看看here
【讨论】:
完美。非常感谢以上是关于Google Cloud PubSub 禁用重试或设置最小值的主要内容,如果未能解决你的问题,请参考以下文章
Google Cloud Tasks HTTP 触发器 - 如何禁用重试
Google Cloud Function - 检测是不是发生重试
google.cloud.pubsub_v1 和 google.cloud.pubsub 有啥区别?
如何使用 Google PubSub 确认 (@google-cloud/pubsub)
Google Cloud Function - ImportError:无法从“google.cloud”(未知位置)导入名称“pubsub”