Google Cloud PubSub 禁用重试或设置最小值
Google Cloud PubSub disable retrying or set a minimum
我正在将 Cloud Scheduler 与 PubSub 和云一起使用 运行。
有时我的服务被触发不止一次,即使我的服务 运行 在云 运行.
上的响应成功(HTTP 204 无内容)
我的服务用了大约 200 秒来响应 PubSub 制作的 POST。
我的问题是:如何限制PubSub的尝试次数?或者我犯了一些错误,比如多次订阅(我只有一个订阅,刚刚在控制台上检查过)?
奇怪的是当我触发 Cloud Scheduler 时,PubSub 多次调用我的服务(见下面的截图)
我正在部署我的 PubSub 和云 运行 如下:
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
创建一个 Cloud Scheduler
启用 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
创建或select 一个服务帐户来代表 Pub/Sub 订阅身份
gcloud iam service-accounts create cloud-run-pubsub-invoker \
--display-name "Cloud Run Pub/Sub Invoker" \
--project ${PROJECT_ID}
部署云运行
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
您需要延长 PubSub 订阅中的 ACK 截止日期。
创建时添加此参数。 600s(10分钟)是最大值。
--ack-deadline=600
您还有其他参数可以设置每次重试之间的延迟、最大重试次数等。看看here
我正在将 Cloud Scheduler 与 PubSub 和云一起使用 运行。
有时我的服务被触发不止一次,即使我的服务 运行 在云 运行.
上的响应成功(HTTP 204 无内容)我的服务用了大约 200 秒来响应 PubSub 制作的 POST。
我的问题是:如何限制PubSub的尝试次数?或者我犯了一些错误,比如多次订阅(我只有一个订阅,刚刚在控制台上检查过)?
奇怪的是当我触发 Cloud Scheduler 时,PubSub 多次调用我的服务(见下面的截图)
我正在部署我的 PubSub 和云 运行 如下:
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
创建一个 Cloud Scheduler启用 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
创建或select 一个服务帐户来代表 Pub/Sub 订阅身份
gcloud iam service-accounts create cloud-run-pubsub-invoker \
--display-name "Cloud Run Pub/Sub Invoker" \
--project ${PROJECT_ID}
部署云运行
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
您需要延长 PubSub 订阅中的 ACK 截止日期。
创建时添加此参数。 600s(10分钟)是最大值。
--ack-deadline=600
您还有其他参数可以设置每次重试之间的延迟、最大重试次数等。看看here