2016-03-15 3 views
0

Я использую Spring Integration для обработки моего собственного TCP-протокола между сервером и клиентами. Это мой context.xml:Весна Интеграция не отвечает

<int-ip:tcp-connection-factory id="serverConnectionFactory" 
           type="server" 
           host="" 
           port="5678" 
           so-linger="5000" 
           so-keep-alive="true" 
           single-use="false" 
           using-nio="true" 
           so-timeout="5000" 
           serializer="customeMessageSerializerDeserializer" 
           deserializer="customeMessageSerializerDeserializer"/> 

<int-ip:tcp-inbound-channel-adapter id="inAdapter.server" 
            channel="toSA" 
            connection-factory="serverConnectionFactory"/> 

<int:channel id="toSA" datatype="com.my.Message"/> 

<int:service-activator input-channel="toSA" 
         output-channel="toObAdapter" 
         ref="handleMessage" 
         method="handle"/> 

<int:channel id="toObAdapter"/> 

<int-ip:tcp-outbound-channel-adapter id="outAdapter.server" 
            channel="toObAdapter" 
            connection-factory="serverConnectionFactory"/> 

<bean id="handleMessage" class="com.my.MessageHandler"/> 
<bean id="customeMessageSerializerDeserializer" 
     class="com.my.MessageSerializyerDeserializer"/> 

Когда я развернуть его с помощью кота он работает на сервал минут и оказаться не реагируем на клиент. Одна найденная ошибка:

org.springframework.messaging.MessageHandlingException: Unable to find outbound socket 
at  org.springframework.integration.ip.tcp.TcpSendingMessageHandler.handleMessageInternal( TcpSendingMessageHandler.java:122) 
at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:127) 
at org.springframework.integration.dispatcher.AbstractDispatcher.tryOptimizedDispatch(AbstractDispatcher.java:116) 
at org.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher.java:147) 
at org.springframework.integration.dispatcher.UnicastingDispatcher.dispatch(UnicastingDispatcher.java:120) 
at org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:77) 
at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:442) 
at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:392) 
at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:115) 
at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:45) 
at org.springframework.messaging.core.AbstractMessageSendingTemplate.send(AbstractMessageSendingTemplate.java:105) 
at org.springframework.integration.handler.AbstractMessageProducingHandler.sendOutput( AbstractMessageProducingHandler.java:231) 
at org.springframework.integration.handler.AbstractMessageProducingHandler.produceOutput( AbstractMessageProducingHandler.java:154) 
at org.springframework.integration.handler.AbstractMessageProducingHandler.sendOutputs( AbstractMessageProducingHandler.java:102) 
at org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal( AbstractReplyProducingMessageHandler.java:105) 
at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:127) 
at org.springframework.integration.dispatcher.AbstractDispatcher.tryOptimizedDispatch(AbstractDispatcher.java:116) 
at org.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher.java:147) 
at org.springframework.integration.dispatcher.UnicastingDispatcher.dispatch(UnicastingDispatcher.java:120) 
at org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:77) 
at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:442) 
at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:392) 
at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:115) 
at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:45) 
at org.springframework.messaging.core.AbstractMessageSendingTemplate.send(AbstractMessageSendingTemplate.java:105) 
at org.springframework.integration.endpoint.MessageProducerSupport.sendMessage(MessageProducerSupport.java:105) 
at org.springframework.integration.ip.tcp.TcpReceivingChannelAdapter.onMessage(TcpReceivingChannelAdapter.java:87) 
at org.springframework.integration.ip.tcp.connection.TcpNioConnection.sendToChannel(TcpNioConnection.java:370) 
at org.springframework.integration.ip.tcp.connection.TcpNioConnection.run(TcpNioConnection.java:239) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
at java.lang.Thread.run(Thread.java:745) 

Я хочу знать, как ее исправить и где это неправильно.

ответ

0

При использовании collaborating channel adapters вы должны обязательно установить заголовок ip_connectionId в исходящем сообщении, чтобы адаптер знал, какой сокет должен его записать.

Как правило, при таком простом потоке структура будет заботиться о распространении заголовка из входящего сообщения в исходящее сообщение.

Поэтому мне нужно увидеть этот метод, чтобы увидеть, что вы делаете.

Как выглядит ваш код handleMessage?

Другая возможность - это 5-секундный тайм-аут - если ваше обслуживание занимает больше времени, то соединение больше не будет существовать.

Как правило, включение ведения журнала DEBUG должно помочь отладить такие проблемы.

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