我目前正在使用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;
}
答案 0 :(得分:2)
通常,您可以在请求中添加唯一标识符,并将会话数据存储在单独的Redis中。
无论哪个节点正在处理请求,该节点都可以从给定请求中标识符的Redis中检索会话数据。
希望这可以帮助您制定解决方案。
答案 1 :(得分:1)
使用此设置
connectionFactory.setSingleUse(false);
只有一个共享连接,因此它始终是粘性的(连接到一台服务器)。
您可以使用ThreadAffinityConnectionFactory将连接绑定到每个调用线程。