Google Cloud PubSub отключит повторную попытку или установит минимум

# #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. Идеальный. Большое спасибо