如何在spring集成tcp网关中实现粘性会话



我目前正在使用spring集成开发一个tcp套接字服务器。到目前为止,我有下面提到的代码。但是,这种套接字服务器的多个节点之间存在负载平衡的可能性。为此,我需要有可以在节点之间共享的套接字连接上下文的stick会话。有人能提出可能的解决方案吗?

@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;
}

在常见情况下,您可以在请求中添加一个唯一的标识符,并将会话数据存储在单独的Redis中。

无论哪个节点正在处理请求,只要请求中有标识符,该节点都可以从Redis中检索会话数据。

希望这能帮助你找到解决方案。

使用此设置

connectionFactory.setSingleUse(false);

只有一个共享连接,所以它总是有粘性的(对一个服务器(。

您可以使用ThreadAffinityConnectionFactory将连接绑定到每个调用线程。

最新更新