2017-02-23 37 views
0

Моя ситуация следующая. В настоящее время в моем приложении коммерческая библиотека используется для ввода ввода, сериализации его каким-то проприетарным способом и затем отправки ее на сервер через TCP. Как я вижу из проверки TCP-трафика, некоторые входные данные, назовем это «клавишей вызова», оставляют «unscrambled» (то есть, я могу взять последовательность байтов, отправленных на сервер, и найти в ней «клавишу вызова» «).TCP-прокси-сервер для перехвата трафика TCP с интеграцией Spring

Я должен изменить это следующим образом: перехватить трафик TCP, посмотреть, является ли «клавиша вызова» «ключом A», а затем отправить вход на сервер A. Если клавиша вызова «клавиша B», I необходимо отправить его на сервер B.

Я думал использовать Spring Integration для этой цели, хотя я мало знаю об этом (я только запускал несколько примеров проектов).

А именно, я хотел бы настроить «канал TCP» (извините, если я использую неправильную терминологию) с конечной точкой ввода, на которую коммерческая библиотека отправит свой вход (localhost: myport); некоторый компонент затем анализирует полезную нагрузку, выясняет, является ли «ключ вызова» «ключом A» или «ключ B» и направляет его на сервер A или сервер B соответственно.

Возможно ли это (то есть более или менее легко достижимо) с существующими компонентами интеграции Spring? Если да, можете ли вы указать, какие компоненты интеграции Spring могут использовать такое решение?

ответ

1

tcp-client-server-multiplex показывает механизм для асинхронного проксирования сценариев запроса/ответа; вам нужно что-то в данных, чтобы иметь возможность сопоставить ответ на запрос.

Для этого используется агрегатор.

С простой tcp-client-server образец, обозначенный в README, шлюзы используются и структура может позаботиться о корреляции (но это не будет обрабатывать большой объем, если вы не используете CachingClientConnectionFactory на исходящей стороне (которая на самом деле ваш только если вы не можете добавить некоторые данные для корреляции ответов).

Если вы говорите только об одностороннем обмене сообщениями, то, очевидно, не требуется корреляция (и вам не нужна инфраструктура агрегатора в первый пример).

В любом случае вы просто добавили бы маршрутизатор в поток для маршрутизации к конечной точке A или B.

Существует более новый пример TCP here, основанный на DSL, который динамически маршрутизируется.

+0

Спасибо, очень информативный. –

Смежные вопросы