Я начал использовать Spring Dataflow, и я нахожусь с некоторыми вопросами, на которые я не могу ответить, прочитав документацию и проведу некоторые тесты. Любое пояснение будет приветствоваться (если вы не можете ответить на все сразу, ответить на те, которые вы можете, я консолидировать полный ответ, если это необходимо)Освещение понятий Spring Dataflow
Spring Dataflow предназначен для записи аппликативными рабочих процессов, например: выход
app A
является входомapp B
и т. д. Рабочие процессы не обязательно должны быть линейными, так как выводapp A
может быть входом какapp B
, так иapp C
. Насколько это точно?Хорошо написано, что приложения в поточном конвейере обмениваются сообщениями «с сообщением».
App A
отправляет сообщение брокеру (например, RabbitMQ или Kafka, например), аapp B
потребляет сообщение от него. Мы можем иметь несколько разных брокеров в нашем потоке. Но является ли обмен сообщениями единственным способом отправки информации между приложениями? Возможно ли, чтоapp A
звонитapp B
через HTTP-запрос REST, например? И если да, то как?Поскольку приложения полагаются на асинхронный обмен сообщениями (см. Выше вопрос), какова добавленная стоимость Dataflow? Я имею в виду, что если вы настроите
app A
для отправки сообщений на темуfoo
иapp B
, чтобы использовать сообщения из той же темы, вы можете развернуть их как отдельно (без потока данных), так и работать. Насколько я понимаю, Dataflow предоставляет только способ развертывания и развертывания их сразу, а не один за другим. Правильно ли это?Как и в предыдущем вопросе, асинхронный обмен сообщениями абстрагирует вас от определения порядка потока (то есть вы можете начать
app B
передapp A
). Вся система будет работать только тогда, когда оба приложения работают, но они даже не должны знать друг друга. Единственное, что нужно, это то, что они используют одного и того же брокера и тему, одну для отправки сообщения, а другую - для получения. Итак, почему вам абсолютно необходимо связать вывод одного приложения с другим, в Spring Cloud Dataflow? Это способ заставить обе приложения использовать одну и ту же тему, но так ли это все?
Спасибо за те прекрасные ответы, Сабби, это определенно помогает. Хотя, по-прежнему я не понимаю некоторых моментов: в архитектуре, управляемой событиями, зачем вам нужно развертывать приложения в определенном порядке? И если мое приложение регистрирует привязку Sink (через механизм @ @ EnableBinding и '@ ServiceActivator'), почему я не могу использовать его самостоятельно в SCDF (на самом деле это последний вопрос, который вы сказали, недостаточно ясен)? По моему мнению, он будет регулярно опробовать службу обмена сообщениями, без необходимости SCDF. Итак, почему мне нужно добавить кран в качестве источника, чтобы в любом случае сохранить поток? –
Мы развертываем приложения по порядку (_i.e: сначала потребители, а затем производители), чтобы убедиться, что потребитель (ы) готов и доступен для обработки сообщений, как только появятся производители. Это не должно быть таким образом в архитектуре обмена сообщениями, но это действительно просто для более чистой обработки и удобства. –