TcpSendingMessageHandler与TcpReceivingChannelAdapter协作

时间:2016-10-05 10:56:09

标签: spring sockets tcp spring-integration

在Spring Integration中,我使用了几个通道适配器来从服务器套接字发送/接收消息。我总是使用以下适配器创建客户端连接:

@Bean
public TcpReceivingChannelAdapter tcpIn(AbstractClientConnectionFactory connectionFactory) throws Exception {
    TcpReceivingChannelAdapter receiver = new TcpReceivingChannelAdapter();
    receiver.setOutputChannel(fromTcp ());
    receiver.setConnectionFactory(connectionFactory);
    return receiver;
}

@Bean
@ServiceActivator(inputChannel = "toTcp")
public TcpSendingMessageHandler tcpOut(AbstractClientConnectionFactory connectionFactory) throws Exception {
    TcpSendingMessageHandler sender = new TcpSendingMessageHandler();
    sender.setConnectionFactory(connectionFactory);
    sender.setClientMode(true);
    return sender;
}

这里的问题是服务器在同一个套接字中回答远程端口(我打开的套接字端口)。例如,如果我将套接字连接到127.0.0.1:4444,则服务器正在回答我打开的端口(使用Socket tcp动态)6873而不是4444.它正在使用相同的套接字。

快速回答可能是使用TcpOutboundGateway但我在这种情况下遇到了一些问题:

  • 我需要在不考虑的情况下管理连接事件 发送/读取操作。例如,我必须自动连接并打开 发送任何消息之前的Socket。
  • 根据文件:
  

对于高容量消息,请考虑使用协作对   通道适配器。但是,您需要提供协作   逻辑。

在高容量场景中,我应该将哪个组件用于请求/响应套接字?

1 个答案:

答案 0 :(得分:0)

请阅读以下字词Reference Manual

  

为了实现高容量吞吐量(避免如上所述使用网关的缺陷),您可以考虑配置一对协作出站和入站通道适配器。

另请参阅TCP Multiplex Sample

  

此示例演示了如何在客户端和服务器端配置协作通道适配器,以及一种将响应与相应请求相关联的技术。