#spring-cloud-stream #spring-cloud-dataflow #spring-cloud-task
#spring-cloud-stream #spring-cloud-поток данных #spring-cloud-task
Вопрос:
У меня есть процесс конвейера данных, который выполняется в течение 12 часов. Он запрашивает файлы в каталоге и запускается каждые 15 минут. На основе некоторой бизнес-логики он либо собирается опубликовать сообщение в очереди обмена сообщениями, либо выполняет некоторую вставку / обновление базы данных. Я предложил 2 подхода:
- Я запускаю его как task, но в этом случае как я могу опубликовать сообщение, не привязывая свой код к какому-либо конкретному поставщику очереди сообщений?
- Я запускаю его как stream, но в этом случае ему придется работать 24/7, хотя процесс не должен выполняться дольше 12 часов.
Какой наилучший способ спроектировать этот процесс в SCDF?
Ответ №1:
Ваше Spring Cloud Task
приложение может передавать события задачи в систему обмена сообщениями. Это можно сделать, добавив зависимость spring-cloud-task-stream
в ваше приложение. Для получения дополнительной информации об этом вы можете обратиться к документации здесь.
Что касается вашего вопроса о том, запускать ли поток или пакет, полностью зависит от вас, исходя из различных факторов, включая платформу, на которой вы это запускаете, и стоимость и т.д.,
Вот некоторые из вариантов:
-
SCDF поддерживает планирование задач в Kubernetes и CloudFoundry. Если вы используете одну из этих сред, то вы можете запланировать
task
проверку входящих файлов и выполнить задачу (1) публикации сообщений в настроенной системе обмена сообщениями (с помощьюspring-cloud-task-stream
упомянутой выше) (2) вставки / обновления jdbc (вам нужно будет определить это в вашем пакете) -
Если вы не можете отменить развертывание потока вручную, вы можете использовать клиент SCDF REST для запуска потока
deploy/undeploy
через пользовательское приложение задач. Таким образом, вы можете контролировать, когда запускать ваши потоки.