# #google-cloud-platform #google-cloud-pubsub
Вопрос:
Я использую облачный планировщик с PubSub и облачным запуском.
Иногда моя служба запускается более одного раза, даже при успешном ответе (HTTP 204 Без содержимого) моей службы, запущенной в облачном режиме.
Моему сервису требуется около 200 секунд, чтобы ответить на СООБЩЕНИЕ, сделанное PubSub.
Мой вопрос: Как я могу ограничить количество попыток PubSub? Или я допустил какую-то ошибку, например, несколько подписок (у меня только одна подписка, только что проверенная на консоли)?
Что странно, когда я запускаю Облачный планировщик, PubSub несколько раз вызывает мою службу (см. Скриншот ниже).
Я развертываю свой PubSub и запуск в облаке следующим образом:
export PROJECT_ID=...
export PROJECT_NUMBER=$(gcloud projects describe --format 'value(projectNumber)' ${PROJECT_ID})
Настройка облачного планировщика (необходимо выполнить только один раз для каждого проекта)
gcloud pubsub topics create supervisor-cron --project ${PROJECT_ID}
Создайте подписку на паб/подписку на подписку
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}
Развертывание Облачного запуска
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}
Создайте подписку на паб/подписку с учетной записью службы
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:
Вам необходимо продлить срок действия ACK в вашей подписке на PubSub.
Добавьте этот параметр при его создании. максимальное значение-600 секунд (10 минут).
--ack-deadline=600
У вас также есть другие параметры для установки задержки между каждой повторной попыткой, максимального числа повторных попыток и так далее. Взгляните сюда
Комментарии:
1. Идеальный. Большое спасибо