我目前正在使用Spring集成在tcp套接字服务器上工作。
到目前为止,我有以下提到的代码。
但是有可能对该套接字服务器的多个节点进行负载平衡。为此,我需要套接字连接上下文的stick session,可以在节点之间共享。谁能建议可能的解决方案?
@Bean
public IntegrationFlow listnerServerFlow(
TcpNetServerConnectionFactory serverConnectionFactory,
DeviceListenerService deviceListenerService) {
return IntegrationFlows
.from(Tcp.inboundGateway(serverConnectionFactory))
.handle(deviceListenerService::processRequest)
.get();
}
@Bean
public TcpNetServerConnectionFactory serverConnectionFactory() {
TcpNetServerConnectionFactory connectionFactory = new TcpNetServerConnectionFactory(2424);
connectionFactory.setSerializer(new ByteArrayCrLfSerializer());
connectionFactory.setDeserializer(new ByteArrayCrLfSerializer());
connectionFactory.setSingleUse(false);
connectionFactory.setSoKeepAlive(true);
return connectionFactory;
}
最佳答案
有了这个设定
connectionFactory.setSingleUse(false);
只有一个共享连接,因此它始终是粘性的(连接到一台服务器)。
您可以使用ThreadAffinityConnectionFactory将连接绑定到每个调用线程。