2017-02-13 5 views
1

Meine Spring Integration-Anwendung auf TCP-Gateway gebaut funktioniert gut. Er nimmt eine Anforderungsnachricht, die zu dem TCP-Gateway kommt, und leitet die Nachricht zur Vorbereitung der Antwort an serviceActivator weiter, und die Antwort wird an den Client gesendet.Senden von Nachricht an ServiceActivator in Spring Integration nach dem Senden der Antwort im TCP-Gateway

Ich möchte die Nachricht in der Datenbank nach dem Senden an den Client speichern. Ich frage mich nur, ob ich die Nachricht an einen anderen ServiceActivator weiterleiten kann, nachdem ich die Antwort an den Client gesendet habe.

Wenn ja, wie sollte die Federkonfiguration eingerichtet werden? Ich würde jede Hilfe in dieser Hinsicht schätzen. Hier

ist die Feder Kontextdatei:

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

Danke

Antwort

1

können Sie fügen <publish-subscribe-channel> als output-channel für diesen <service-activator>. Einer der Teilnehmer wäre <int-jdbc:outbound-channel-adapter>, um eine Antwort auf die DB zu speichern. Ein anderer Teilnehmer sollte <bridge> ohne output-channel sein, vorausgesetzt, die Antwort auf die <int-ip:tcp-inbound-gateway>.

Aber ja, es ist vor zu Client gesendet ...

Zu diesem Zweck können Sie Serializer erweitern und mit den byte[] bereits gewünschter Logik durchführen, nachdem super.serialize() ausführen.

+1

Sie können 'order =" 1 "' auf die Bridge setzen (zusammen mit einem 'output-channel', der 'Antwortkanal' auf dem eingehenden Gateway) und' order = "2" 'auf dem jdbc-Adapter und die Antwort wird zuerst gesendet. –

Verwandte Themen