2016-03-15 86 views
0

我使用Spring集成来处理服务器和客户端之间的自定义TCP协议。这是我的context.xml:Spring集成不响应

<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"/> 

当我通过tomcat的它为薮几分钟内部署,并把它转化为对客户端没有反应。发现一个错误:

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日志应该可以帮助调试这样的问题。