Поведение, которое вы видите, является результатом двух фактов:
с использованием executeWithFork
добавляет немного дополнительной задержки для переключения потоков
ConcurrentSubject.publish
(в отличие от replay
, например). Если вы откроете документы для PublishSubject
, то увидите, что
A
blockquote>PublishSubject
отправляет подписчику только те элементы, которые испускаются Источник после времени подписки.Другими словами, у вас есть условие состязания между основным потоком, который публикует
"one"
и"two"
, и разветвленным потоком, который должен подписаться наinput
, чтобы получить данные. Результаты зависят от того, какой поток выиграет гонку: все данные, опубликованные до подписки, будут потеряны. Одно мое оборудование я почти всегда вижу"two"
и очень редко даже вижу"one"
, ваши результаты могут отличаться.Самый простой способ проверить это - добавить
Thread.sleep(100)
перед первымinput.onNext
, и вы должны увидеть оба события, напечатанные каждый раз. Вы также можете попытаться выдвинуть больше событий, чем просто 2, чтобы увидеть, что не все потеряно.
Помните, «ESB» - это просто маркетинговый термин, предназначенный для продажи более дорогого программного обеспечения, а не волшебная пуля. Вам необходимо подумать о конкретных задачах, которые вам нужно выполнять, и выбрать соответствующий вариант. Если Spring Integration, кажется, отвечает всем требованиям, я бы не стал слишком беспокоиться, если он не будет похож на сверхдорогую установку сервера.
Эта ссылка описывает FileSucker с Интеграцией Spring. Читайте на Ваших шаблонах Интеграции Предприятия для большего количества информации, я думаю.
Я отчасти думаю, что необходимо сделать немного больше расследования Ваш сам или сделать несколько попыток на некоторых вариантах использования. Затем мы можем обсудить то, что хорошо и плохо