2017-02-13 77 views
1

构建在TCP网关上的My Spring Integration应用程序运行良好。它将请求消息发送到TCP网关,并将消息转发到serviceActivator以准备响应,并将响应发送到客户端。在TCP网关发送响应后,在Spring集成中发送消息到serviceActivator

我想将消息发送到客户端后保存到数据库。我只是想知道在将响应发送到客户端后是否可以将消息转发到另一个serviceActivator。

如果是,应如何设置弹簧配置? 我希望在这方面提供任何帮助。

这里是Spring上下文文件:

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

谢谢

回答

1

您可以添加<publish-subscribe-channel>output-channel<service-activator>。其中一位用户将<int-jdbc:outbound-channel-adapter>存储对数据库的回复。另一个用户应该是<bridge>而不是output-channel,假设回复<int-ip:tcp-inbound-gateway>。

但是,是的,它是之前发送给客户端...

为了这个目的,你可以扩展Serializer并且已经执行super.serialize()后与byte[]执行所需的逻辑。

+1

您可以在桥上(在入站网关上连同'output-channel'是'reply-channel')和'order =“2”'在jdbc适配器上放置'order =并且回复将首先发送。 –