Экземпляр проходного узла весенней сессии Hazelcast - PullRequest
0 голосов
/ 20 марта 2019

Попытка настроить Spring Session с помощью Hazelcast.Он работает нормально из коробки, используя этот документ - но он использует узел Hazelcast по умолчанию.В моем случае я использую несколько узлов (это разные кластеры) на одной и той же JVM, и мне нужно использовать конкретный экземпляр hazelcast для хранения моего сеанса.Я не нашел много информации, как его настроить (передать имя экземпляра hazelcast \ или сам экземпляр).

Буду признателен за любую помощь.

Ответы [ 2 ]

0 голосов
/ 21 марта 2019

Следующий код позволяет мне настроить 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;
    }

}
0 голосов
/ 20 марта 2019

Хранилище сеанса разделено между доступными узлами.Вы не можете выбрать, какой узел размещает какой-либо конкретный сеанс.Кроме того, если Hazelcast необходимо перебалансировать сегменты, сеансы могут перемещаться с одного узла на другой.

Параметр instance-name просто указывает, следует ли пытаться найти существующее соединение с кластером или запустить новоеconnnection.

Возможно, вопрос в том, зачем вам контролировать, на каком узле размещается какой сеанс?

...