0

そのため、Spring アプリを Heroku に 2 つのノードでデプロイしました。バスケットに商品を追加してカート ページを更新すると、商品が表示される場合と表示されない場合があることに気付きました。そのため、リクエストが毎回異なるノードにヒットしている可能性があると考えています。

spring-session の Web サイトで確認This can make clustering much easier. This is nice because the clustering setup is done in a vendor neutral way. Furthermore, in some environments (i.e. PaaS solutions) developers cannot modify the cluster settings easily.できますが、 でスティッキー セッションの設定を行う方法が見つかりませんでしたspring-session。私のセットアップは、箱から出してすぐのものです。

@Bean(name = { "defaultRedisSessionRepository", "sessionRepository" })
@ConditionalOnProperty(name = { "nemesis.platform.redis.url" })
public SessionRepository defaultRedisSessionRepository(RedisTemplate<String,ExpiringSession> redisTemplate) throws Exception {
    return new RedisOperationsSessionRepository(redisTemplate);
}

次に、私のMVC構成で:

@Bean(name = {"defaultSessionFilter", "sessionFilter"})
public Filter sessionFilter() {
    CompositeFilter compositeFilter = new CompositeFilter();
    compositeFilter.setFilters(Arrays.asList(new SessionRepositoryFilter(applicationContext.getBean("sessionRepository", SessionRepository.class)), applicationContext.getBean(UrlEncoderFilter.NAME, UrlEncoderFilter.class)));

    return compositeFilter;
}

そして私の中でWebApplicationInitializer

    final FilterRegistration sessionFilterChainReg = servletContext.addFilter("sessionFilter", DelegatingFilterProxy.class);
    sessionFilterChainReg.addMappingForServletNames(EnumSet.of(DispatcherType.REQUEST, DispatcherType.ERROR, DispatcherType.ASYNC, DispatcherType.FORWARD, DispatcherType.INCLUDE), false, dispatcherServletReg.getName());
4

1 に答える 1

1

Spring Session はスティッキー セッションをセットアップしません。代わりに、中央のデータストア (Redis) に配置することで、任意の JVM がセッション オブジェクトをルックアップできるようにします。

于 2014-12-03T17:11:44.933 に答える