弹簧集成的双向消息传递

时间:2014-05-21 22:00:34

标签: spring spring-integration distributed-transactions

我对Spring集成比较陌生,但我的任务是实现一个需要的tcp网关:

  • 侦听套接字上的消息
  • 收到消息
  • 处理消息并将一些数据写入队列
  • 将响应消息返回原始套接字。

根据我对弹簧集成的经验,消息流不是双向的。我只配置了侦听器,处理消息和输出到队列/主题的路由器。但是,在这种情况下,我需要接受消息并返回响应,同时还将某些消息转发到队列。建议?

到目前为止,这是我的集成xml。

<int:chain input-channel="tcpChannel">
    <int:service-activator ref="tcpHandler" method="handleInput" />
</int:chain>

<int-ip:tcp-inbound-gateway 
             id="tcpGateway"
             connection-factory="tcpServer" 
             request-channel="tcpChannel" />

如何将handleInput的输出转发到队列,还要从网关发回一些响应?

编辑:在与Gary谈话之后,这似乎是我们想要遵循的模式:

<int-ip:tcp-inbound-gateway id="tcpGateway"
                            connection-factory="tcpServer"
                            request-channel="tcpChannel"
                            reply-channel="tcpReplyChannel"/>

<int:publish-subscribe-channel id="tcpChannel" />

<int:chain input-channel="tcpChannel">
    <!-- int:json-to-object-transformer type="com.heb.revo.events.RxPosCredit" /-->
    <int:service-activator ref="tcpHandler" method="handleInputToQueue" />
    <jms:outbound-channel-adapter destination-name="${queue.response}" />
</int:chain>

<int:service-activator id="tcpResponseHandler"
                       ref="tcpHandler" method="replyToSocket"
                       input-channel="tcpChannel"
                       output-channel="tcpReplyChannel" />

<int:publish-subscribe-channel id="tcpReplyChannel" />

1 个答案:

答案 0 :(得分:0)

由于您的链没有output-channel,框架会自动将handleInput方法的返回值路由回网关。

如果您想捕获结果并将其发送到其他地方(以及回复),请创建<int:publish-subscribe-channel id="foo"/>,将链的output-channel设置为foo,然后设置reply-channel网关上的foo,并将另一个端点订阅到foo(作为input-channel