【发布时间】:2018-07-15 21:21:59
【问题描述】:
我正在使用@MessagingGateway 将数据发送到服务器。我为出站网关配置了 AbstractClientConnectionFactory 和 @ServiceActivator。
为了向我的服务器发送数据,我需要在连接启动时发送握手消息。如果来自服务器的响应是我期望的握手响应,那么我发送有意义的数据。我最初的解决方案是
if (gateway.handshake(HANDSHAKE).equals(HANDSHAKE_RESPONSE))
gateway.sendData(data);
当我扩大规模时,这不是很好,因为我已经通过 tcp 将我的呼叫增加了一倍,因为我只需要在连接启动时发送发送握手,而不是每次都发送。另外,我计划保持连接活跃。
那么在连接启动时,我怎样才能实现这个自定义握手呢?
@Bean
public AbstractClientConnectionFactory clientCF() {
TcpNetClientConnectionFactory tcpNetClientConnectionFactory = new TcpNetClientConnectionFactory(host, port);
tcpNetClientConnectionFactory.setSerializer(new serializerDeserializer());
tcpNetClientConnectionFactory.setDeserializer(new serializerDeserializer());
tcpNetClientConnectionFactory.setSoKeepAlive(true);
tcpNetClientConnectionFactory.setSoTimeout(soTimeout);
return tcpNetClientConnectionFactory;
}
@Bean
@ServiceActivator(inputChannel = "toTcp")
public MessageHandler tcpOutGate(AbstractClientConnectionFactory connectionFactory) {
TcpOutboundGateway gate = new TcpOutboundGateway();
gate.setConnectionFactory(connectionFactory);
return gate;
}
@Bean
public MessageChannel fromTcp() {
return new DirectChannel();
}
【问题讨论】:
标签: sockets tcp spring-integration