Мне нужно определить несколько потоков из нескольких источников, а затем объединить их в один. Прочитав всю документацию Spring XD, я не нашел ни одного предопределенного модуля, который может выполнять объединение (например, на основе скользящих окон). Есть ли какое-нибудь решение для этого? Благодарю.
Можно ли ПРИСОЕДИНИТЬСЯ к нескольким потокам с помощью Spring XD?
Ответы (1)
Это можно сделать с помощью именованных каналов. . Например, вы можете создать несколько потоков, которые выводят в очередь, и поток «присоединения», который использует очередь в качестве источника:
xd:>stream create s1 --definition "http --port=9000 > queue:join" --deploy
xd:>stream create s2 --definition "http --port=9001 > queue:join" --deploy
xd:>stream create join --definition "queue:join > file" --deploy
Приведенный выше код будет записывать содержимое, отправленное либо на http://somehost.example.com:9000, либо на порт http://somehost.example.com:9001 в файл.
person
dturanski
schedule
04.08.2014
Спасибо за ваш ответ, но это похоже на слияние, а не на объединение. Соединение означает сопоставление кортежей из каждого входного потока для создания новых кортежей в выходном потоке. В потоковой передаче мы обычно используем скользящие временные окна для объединения кортежей из нескольких входных потоков и их корреляции. Кажется, что скользящие окна не включены в Spring XD?
- person user3906228; 05.08.2014
В целях присоединения вы можете взглянуть на модуль агрегатора (процессор), который сохраняет сообщения и сопоставляет их, используя некоторую подключаемую логику. Вам может быть интересна документация по Spring Integration этого (docs.spring.io/spring-integration/docs/4.1.0.BUILD-SNAPSHOT/)
- person ebottard; 05.08.2014
Это не работает как объединение или слияние. В вашем файле просто будут записи, размещенные в обоих источниках. Возможно, модуль агрегатора может быть настроен в соответствии с вашими потребностями.
- person Arun Jose; 12.08.2014