2013-09-03 9 views
0

Я новичок в Spring Integration и в настоящее время пытается получить данные с некоторых устройств через TCP. Я придумал следующий контекст Spring:Как реализовать связь TCP-соединения с интеграцией Spring?

<bean id="serializer" class="com.somepackage.CustomSerializer"/> 

<int-ip:tcp-connection-factory id="connectionFactory" 
           type="server" 
           port="${tcp.socket.connection.listener.port}" 
           deserializer="serializer" /> 

Проблемы с протоколом беспроводного устройства является то, что при первоначальном подключении он посылает последовательность квитирования и ожидает волшебный ответа, прежде чем он начинает посылать сообщения.

A сообщение шаблон отличается от последовательности установления связи, я не могу реализовать сериализатор, который различает эти два. Если бы я мог реализовать этот процесс рукопожатия в качестве перехватчика. Итак, я попытался реализовать полноразмерный сериализатор, но оказалось, что сериализаторы являются одноточечными, разделяемыми между различными соединениями.

Не могли бы вы посоветовать, как выполнить некоторые пользовательские переговоры (подтверждение связи) до того, как механизмы по умолчанию (разделение данных на сообщения) вступают в игру? Должен ли я настраивать фабрику соединений?

Спасибо!

ответ

0

Я думаю, что вам нужно обычай TCP Interceptor. Из документации:

16,4 TCP перехватчики подключения

фабрики подключений могут быть сконфигурированы с ссылкой на TcpConnectionInterceptorFactoryChain. Перехватчики могут использоваться для добавления поведения к соединениям, таким как согласование, безопасность и другие настройки. Никакие перехватчики в настоящее время не предусмотрены каркасом, но, например, см. InterceptedSharedConnectionTests в исходном репозитории.

+0

Да, я пытался, но перехватчик опирается на уже разобранный входной поток OnMessage (Message сообщения), и мой десериализатор не знает, как разобрать входной поток, потому что он не имеет состояния – ievgen

+0

не см WebSocket материала в расширениях репо - он использует дезактиватор с сохранением состояния вместе с перехватчиком. https://github.com/SpringSource/spring-integration-extensions/tree/master/spring-integration-ip-extensions Однако ему нужна Spring Integration 3.0, поэтому перехватчик может получить доступ к состоянию десериализатора (и очистить его, когда соединение закрыто). –

+0

Хорошо, так как Spring Integration 3.0 еще не выпущена. Я следил за подходом к настройке фабрики соединений и реализовал логику установления связи в месте, где создается новое соединение. – ievgen

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