目前,我们在我们的应用程序中使用Spring Integration 2.1.0 Release。申请流程如下:
1)应用程序处理一些数据并将最终字符串放在Active MQ上。
2)我使用了消息驱动通道适配器和服务激活器来读取队列中的数据。
3)使用tcp-outbound-gateway在服务器(应用程序作为客户端)上成功显示数据。
4)我使用的是single-use =“true”,因为要求是在确认时或超时后断开频道。
5)问题是当数据是批量存在时,假设队列中有10条消息,因此它将显示连接和断开连接10次,而不是在连接上发送requestMessage。
看起来它是由于spring使用的线程,因为当我在TcpOutboundGateway的handleMessageInternal(Message)方法上应用断点时,每个消息都成功发送,当控制到达connection.send(requestMessage)时;但是在运行模式下我看到连接,断开行为而没有传入消息。
配置代码
<int:channel id="telnetChannel" />
<beans:bean id="clientCustomSerializer"
class="com.telnet.core.serializer.CustomSerializer">
<beans:property name="terminatingChar" value="10" />
<beans:property name="maxLength" value="65535" />
</beans:bean>
<int:gateway id="gw" service-interface="com.telnet.core.integration.connection.ParseConfig$SimpleGateway"
default-request-channel="telnetClientChannel"/>
<ip:tcp-connection-factory id="clientFactory"
type="client" host="localhost" port="1122" single-use="true" using-nio="false" serializer="${client.serializer}" deserializer="${client.serializer}" so-timeout="10000"
/>
<ip:tcp-outbound-gateway id="clientInGwAck" request-channel="telnetChannel"
connection-factory="clientFactory"
reply-channel="replyChannel"
reply-timeout="10000"/>
<!-- To send the messege over server via JMS and serviceActivator -->
<int:channel id="requestMessageChannel" />
<beans:bean id="clientServiceActivator" class=
"com.telnet.core.integration.clientServiceActivator">
</beans:bean>
<int-jms:message-driven-channel-adapter id="requestMessageChannelAdapter"
error-channel="errorChannel"
connection-factory="mqConnectionFactory"
destination-name="${client.messaging.processing.queues}"
channel="requestMessageChannel"/>
<int:service-activator id="messageActivator"
input-channel="requestMessageChannel"
output-channel="telnetChannel"
ref="clientServiceActivator" method="getOutboundMessage">
</int:service-activator>
这里的问题是,如果有多条消息,那么它显示连接和断开连接而没有任何数据流。看起来这是由于弹簧实现的线程。协助需要如何解决此问题。