У меня есть сценарий, в котором я обрабатываю большой файл журнала, загружая его в ESB на основе Camel. Первой остановкой на этой шине является процессор LogTransformer
, который анализирует сообщения журнала из файла журнала одно за другим (в реальном времени) и создает фрагменты XML:
<log-record level="INFO" source="MyApp" .../>
Каждый из этих <log-record/>
фрагментов XML помещается в очередь сообщений и забирается шиной. В конце концов он попадает в базу данных MySQL.
У меня есть определенные процессоры, которые я хочу запустить только после того, как файл журнала будет полностью обработан (все записи журнала были преобразованы в <log-record/>
и поставлены в очередь, обработаны шиной и сохранены в БД). Такие вещи, как генераторы отчетов, компоненты бизнес-аналитики и т. Д. Эти процессоры не должны запускаться, пока весь журнал не будет поставлен в очередь.
Какой способ Camel автоматически указывает этим процессорам, что они могут начать работу?
Лучшее, что я могу придумать, - это сделать так, чтобы мой LogTransformer
процессор (часть, которая анализирует записи журнала, преобразует их в <log-record>
XML и ставит их в очередь) создает запись журнала EOF после завершения обработки журнала. Что-то вроде <log-record eof="true">
. Затем он помещает это сообщение в очередь, как обычно.
Когда последний процессор в шине (который сохраняется <log-record>
в MySQL) встречает запись журнала EOF, вместо того, чтобы сохранять ее, он ставит ее в очередь.
Эти генераторы отчетов, компоненты BI и т. Д. Ожидают начала сообщения в этой очереди.
Это решение кажется запутанным. Я новичок в ESB и Camel, поэтому я подумал, что будет EIP / процессор, который обрабатывает этот сценарий, но я не могу его найти. Как Camel Wizard структурирует это решение?