Следует ли внедрять подход, основанный на задаче или потоке

#spring-cloud-stream #spring-cloud-dataflow #spring-cloud-task

#spring-cloud-stream #spring-cloud-поток данных #spring-cloud-task

Вопрос:

У меня есть процесс конвейера данных, который выполняется в течение 12 часов. Он запрашивает файлы в каталоге и запускается каждые 15 минут. На основе некоторой бизнес-логики он либо собирается опубликовать сообщение в очереди обмена сообщениями, либо выполняет некоторую вставку / обновление базы данных. Я предложил 2 подхода:

  1. Я запускаю его как task, но в этом случае как я могу опубликовать сообщение, не привязывая свой код к какому-либо конкретному поставщику очереди сообщений?
  2. Я запускаю его как 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 через пользовательское приложение задач. Таким образом, вы можете контролировать, когда запускать ваши потоки.