簡體   English   中英

如何在spring-integration tcp網關中實現粘性session?

[英]How to implement sticky session in spring-integration tcp gateway?

我目前正在使用 spring 集成開發 tcp 套接字服務器。 到目前為止,我有下面提到的代碼。 但是有可能對這個套接字服務器的多個節點進行負載平衡。 為此,我需要有可以在節點之間共享的套接字連接上下文的粘貼會話。 任何人都可以提出可能的解決方案嗎?

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

在常見情況下,您可以在請求中添加唯一標識符,並將 session 數據存儲在單獨的 Redis 中。

無論哪個節點正在處理請求,節點都可以根據請求中的標識符從 Redis 中檢索 session 數據。

希望這可以幫助您找到解決方案。

有了這個設置

connectionFactory.setSingleUse(false);

只有一個共享連接,因此它始終具有粘性(對一台服務器)。

您可以使用ThreadAffinityConnectionFactory將連接綁定到每個調用線程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM