Я ищу помощь! Я работаю над небольшим проектом, который включает публикацию сообщения в Google Pub / Sub Topi c и использование подписки 'pu sh' для запуска службы Cloud Run HTTPS. У меня проблема в том, что крайний срок Ack для подписки 'pu sh', похоже, не соблюдается. Я вижу, что одно и то же сообщение порождает несколько контейнеров в службе Cloud Run, хотя крайний срок Ack или время ожидания запроса не были достигнуты при первом запуске. Я хочу, чтобы только 1 сообщение порождало 1 контейнер до завершения (возврат 200 OK).
Текущий поток (выпуск):
- Сообщение опубликовано в pubsub topi c
- Подписка 'pu sh' (с 600-секундным крайним сроком подтверждения) перенаправляет сообщение в конечную точку службы HTTPS в Cloud Run (с тайм-аутом 600-секундного запроса)
- Служба Cloud Run начинает обработку этого сообщение, эта работа занимает 120 секунд
- Во время обработки то же сообщение повторно запускает новый контейнер службы Cloud Run (каждые 10 секунд до завершения первого контейнера), порождая несколько контейнеров для одного и того же сообщения.
- После завершения первого контейнера Cloud Run новые контейнеры Cloud Run не запускаются, и сообщение перестает получать каждые 10 секунд.
Снимок экрана
Ожидаемый поток (Что я хочу):
- Сообщение публикуется в pubsub topi c
- A 'pu sh' подписка (с 600-секундным сроком подтверждения Ack) пересылает сообщение в конечную точку службы Cloud Run HTTPS (с тайм-аутом запроса 600 секунд)
- Служба Cloud Run обрабатывает это сообщение в течение 120 секунд только с одним контейнером. Любые НОВЫЕ сообщения должны запускаться в отдельном контейнере.
- Служба Cloud Run завершает обработку в течение 600-секундного крайнего срока Ack и не порождает новые контейнеры для того же сообщения.
Описание подписки :
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
Я добавил функцию сна в Код учебника Pub / Sub для имитации 120 секунд работы:
https://github.com/cvasq/golang-samples/commit/fa2286d4395d31b5eca12d73dd24187042211124
Текущее решение: Установите максимальное количество количество контейнеров и максимальное количество запросов на контейнер к 1. Это позволяет обрабатывать только 1 сообщение от topi c за один раз.
Может кто-нибудь дать некоторые указания относительно того, почему это может происходить? Конфиг кажется правильным, но я могу что-то упустить.