Я настраиваю новый проект GCP для чтения и анализа файла CSV, как только он загружен в корзину.Для этого я создал триггер, который публикует в паб / саб.Pub / Sub сам отправляет сообщения в фоновую функцию.
Кажется, все работает нормально, например, как только загруженный файл запускается, триггер начинает отправлять сообщение в Pubsub, а затем в функцию.Я также вижу сообщение, поступающее в функцию.
Проблема, однако, заключается в отправке Ack обратно в паб / саб.Где-то я читал, что отправка обратно любого статуса 2xx должна выполнять работу (чтобы удалить сообщение из очереди), но это не так.В результате pubsub «думает», что сообщение не было доставлено, и отправляет сообщение снова и снова.
def parse_data(data, context):
if 'data' in data:
args = base64.b64decode(data['data']).decode('utf-8')
pubsub_message = args.replace('\n', ' ')
properties = json.loads(pubsub_message)
myBucket = validate_message(properties, 'bucket')
myFileName = validate_message(properties, "name")
fileLocation = 'gs://'+myBucket+'/'+myFileName
readAndEnhanceData(fileLocation)
return 'OK', 200
else:
return 'Something went wrong, no data received'
и вот файл журнала, который показывает, что функция вызывается постоянно.
D CSV_Parser_Raw_Data 518626734652287 Function execution took 72855 ms,
finished with status: 'ok' CSV_Parser_Raw_Data 518626734652287
D CSV_Parser_Raw_Data 518626708442766 Function execution took 131886 ms,
finished with status: 'ok' CSV_Parser_Raw_Data 518626708442766
D CSV_Parser_Raw_Data 518624470100006 Function execution took 65412 ms,
finished with status: 'ok' CSV_Parser_Raw_Data 518624470100006
D CSV_Parser_Raw_Data 518626734629237 Function execution took 68004 ms,
finished with status: 'ok' CSV_Parser_Raw_Data 518626734629237
D CSV_Parser_Raw_Data 518623777839079 Function execution took 131255 ms,
finished with status: 'ok' CSV_Parser_Raw_Data 518623777839079
D CSV_Parser_Raw_Data 518623548622842 Function execution took 131186 ms,
finished with status: 'ok' CSV_Parser_Raw_Data 518623548622842
D CSV_Parser_Raw_Data 518623769252453 Function execution took 133981 ms,
finished with status: 'ok' CSV_Parser_Raw_Data 518623769252453
Так что я был бы рад узнать, чего мне здесь не хватает!Т.е. как я могу разорвать этот цикл?
* ОБНОВЛЕНИЕ в выпуске * Благодаря @kamal, который заставил меня открыть глаза, поручил мне воссоздать ведра / темы и т. Д., Пока я былна задаче, пересмотрел все и понял, я использовал временный файл в подпапке, но в том же ведре, как загружать файлы!Это была проблема.Событие Finalize предназначено для ЛЮБОГО объекта, созданного ВСЕГДА в корзине.Итак, Камаль был прав: несколько загрузок происходили!
Если вы работаете с таким же образом, создайте папку tmp и не добавляйте в нее ЛЮБОЙ триггер.