#google-cloud-platform #google-cloud-pubsub #dataflow
#google-облачная платформа #google-cloud-pubsub #поток данных
Вопрос:
Мне интересно узнать, каким было бы наилучшее решение следующей проблемы: у меня есть данные телеметрии, опубликованные в pubsub с интервалом в 10 секунд. Данные изменяются циклически (т. е. Один конкретный параметр изменяется с 400 на 1700 и сбрасывается обратно на 400 …)
Я хотел бы запустить облачную функцию или API облачного запуска, когда параметр равен 800, 1200 и 1500.
Итак, мне было интересно, существует ли такая вещь, с помощью которой мы можем запустить облачную функцию / облачный запуск, если в сообщении pubsub говорится, что параметр имеет эти значения?
Конечно, один из способов сделать это — написать облачную функцию, которая всегда активируется при публикации нового сообщения, и использовать условие «если», чтобы определить, следует ли продолжать. Однако я думаю, что это очень дорогой метод, потому что облачная функция будет запускаться каждые 10 секунд, когда эти циклы особенно длинные и их не нужно часто выполнять. Поэтому мне интересно, есть ли более экономичный метод.
Ответ №1:
Наивное решение прекрасно, даже если оно не «элегантное». Нам еще нужно определить, что такое «очень дорого». Запуск одной функции не является важным расходом. Особенно если учесть использование бесплатного уровня.
При этом с июня бета-версия PubSub выпустила функцию фильтрации, которая позволяет вам устанавливать условия доставки на основе атрибутов вашего сообщения. Это может вам помочь. Я говорю, что, насколько я могу судить, в содержимом полезной нагрузки нет оператора сравнения. Только атрибуты. Таким образом, вам придется подделывать сообщения с атрибутами, которые позволяют вам доставлять или нет в соответствии с вашим бизнес-правилом.
Комментарии:
1. Да, Pub / Sub фильтрует
attributes
поле, а неdata
поле. Можете ли вы поместить этот параметр в поле атрибутов?2. Создавая сообщение pub / sub, вы можете установить любое значение, которое вам нужно в вашем атрибуте. Смотрите в java: PubsubMessage. Конструктор в googleapis.dev/java/google-cloud-pubsub/latest/index.html Но я бы сказал, что в случае вопроса, если у вас есть только один подписчик, нет необходимости проходить через фильтр. Просто сделайте так, чтобы ваши исходные данные генерировали сообщение pub / sub только тогда, когда вам это нужно.