【问题标题】:Sending message to serviceActivator in Spring Integration after sending response in TCP gateway在 TCP 网关中发送响应后,在 Spring Integration 中向 serviceActivator 发送消息
【发布时间】:2017-02-13 19:57:06
【问题描述】:

我基于 TCP 网关构建的 Spring Integration 应用程序运行良好。它接收到 TCP 网关的请求消息并将消息转发给 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>

谢谢

【问题讨论】:

    标签: java spring tcp spring-integration


    【解决方案1】:

    您可以为该&lt;service-activator&gt; 添加&lt;publish-subscribe-channel&gt; 作为output-channel。其中一位订阅者是&lt;int-jdbc:outbound-channel-adapter&gt;,用于存储对数据库的回复。另一个订阅者应该是&lt;bridge&gt;,没有output-channel,假设回复&lt;int-ip:tcp-inbound-gateway>。

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

    为此,您可以扩展Serializer 并在执行super.serialize() 之后使用byte[] 执行所需的逻辑。

    【讨论】:

    • 您可以将order="1"放在网桥上(连同output-channel,即入站网关上的reply-channel)和jdbc适配器上的order="2",将首先发送回复.
    猜你喜欢
    • 1970-01-01
    • 2020-10-13
    • 2013-10-14
    • 1970-01-01
    • 2016-09-09
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 2018-11-24
    相关资源
    最近更新 更多