基于TCP网关构建的My Spring Integration应用程序运行良好。它接收到TCP网关的请求消息,并将消息转发给serviceActivator以准备响应,并将响应发送到客户端。
我想在发送到客户端后将消息保存到数据库。我只是想知道在将响应发送给客户端后是否可以将消息转发给另一个serviceActivator。
如果是,应该如何设置弹簧配置? 在这方面,我将不胜感激。
这是弹簧上下文文件:
<beans>
<int-ip:tcp-connection-factory id="crLfServer"
type="server"
port="${availableServerSocket}"
single-use="true"
so-timeout="10000"
using-nio="false"
serializer="connectionSerializeDeserialize"
deserializer="connectionSerializeDeserialize"
/>
<bean id="connectionSerializeDeserialize" class="org.springframework.integration.ip.tcp.serializer.ByteArrayStxEtxSerializer"/>
<int-ip:tcp-inbound-gateway id="gatewayCrLf"
connection-factory="crLfServer"
request-channel="serverBytes2StringChannel"
error-channel="errorChannel"
reply-timeout="10000"/> <!-- reply-timeout works on inbound-gateway -->
<int:channel id="toSA" />
<int:service-activator input-channel="toSA"
ref="myService"
method="prepare"/>
<int:object-to-string-transformer id="serverBytes2String"
input-channel="serverBytes2StringChannel"
output-channel="toSA"/>
<int:transformer id="errorHandler"
input-channel="errorChannel"
expression="payload.failedMessage.payload + ':' + payload.cause.message"/>
</beans>
谢谢
答案 0 :(得分:1)
您可以为<publish-subscribe-channel>
添加output-channel
<service-activator>
。其中一个订户将<int-jdbc:outbound-channel-adapter>
存储对数据库的回复。另一位订阅者应该是<bridge>
而output-channel
没有假设回复<int-ip:tcp-inbound-gateway
&gt;。
但是,之前发送给客户
。为此,您可以在执行Serializer
之后延伸byte[]
并使用super.serialize()
执行所需的逻辑。