Hazelcast Spring Session传递节点实例

问题描述 投票:0回答:2

尝试使用Hazelcast配置Spring Session。它可以使用this doc开箱即用 - 但它使用默认的hazelcast节点。在我的情况下,我在同一个JVM上运行几个节点(它们位于不同的集群中),我需要使用特定的hazelcast实例来存储我的会话。我没有找到太多信息,如何配置它(传递hazelcast实例名称\或实例本身)。

将不胜感激任何帮助。

hazelcast spring-session
2个回答
0
投票

会话存储在可用节点之间进行分片。您无法选择哪个节点承载任何特定会话。此外,如果Hazelcast需要重新平衡分片,则会话可能会从一个节点移动到另一个节点。

instance-name参数只是决定是否尝试查找与群集的现有连接或是否开始新的连接。

也许问题是为什么你需要控制哪个节点主持哪个会话?


0
投票

下一代码让我配置Spring Session以使用特定节点,而不是默认节点。我唯一的问题是如何配置会话时间。 hazelcastSessionRepository.setDefaultMaxInactiveInterval(3600)只设置最长的非活动时间,而不是生存时间。

@Configuration
@EnableSpringHttpSession
public class HazelcastSessionConfig {

    @Bean//default
    public HazelcastInstance hazelcastInstance() {
        Config config = new Config();
        config.setInstanceName("cache-node");
        config.getGroupConfig().setName("cluster-1");
        return Hazelcast.newHazelcastInstance(config);
    }

    @Bean//Node I need to use
    public HazelcastInstance hazelcastSessionInstance() {

        Config config = new Config();
        config.setInstanceName("session-node");
        config.getGroupConfig().setName("cluster-2");
        MapAttributeConfig attributeConfig = new MapAttributeConfig()
                .setName(HazelcastSessionRepository.PRINCIPAL_NAME_ATTRIBUTE)
                .setExtractor(PrincipalNameExtractor.class.getName());


        final MapConfig mapConfig = config.getMapConfig(HazelcastSessionRepository.DEFAULT_SESSION_MAP_NAME);
        mapConfig
                .addMapAttributeConfig(attributeConfig)
                .addMapIndexConfig(new MapIndexConfig(
                        HazelcastSessionRepository.PRINCIPAL_NAME_ATTRIBUTE, false));

        return Hazelcast.newHazelcastInstance(config);
    }


    @Bean//Pass node here
    public HazelcastSessionRepository sessionRepository(HazelcastInstance hazelcastSessionInstance) {
        final HazelcastSessionRepository hazelcastSessionRepository = new HazelcastSessionRepository(hazelcastSessionInstance);
        hazelcastSessionRepository.setDefaultMaxInactiveInterval(3600);
        return hazelcastSessionRepository;
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.