セッションの回避策のクラスタ状態
クラスタ環境では、他のタスクがOnサーバーBに割り当てられている間、サーバーAの罰金の後、サーバーAのケースセッションがサーバー上に存在していない要求は、別のサーバプロセスの起動に転送することができる、これはつながりますBで、ユーザ体験は確かに受け入れられないので、ユーザーは、再度ログオンできるようになります。
ソリューション
- セッションレプリケーション(クラスタ環境が大きすぎる場合は、推奨されません)
- 共有セッション
- クッキーに保存されている(推奨されません)
セッションの共有使用を解決する方法
- テスト環境:春ブーツ+ Redisの
- クロームブラウザのテストツール
- 開発ツールのアイデア
- プロジェクト・ビルド・ツールのmaven
1:まずspringbootプロジェクトを作成します
<依存性> <依存性> <のgroupId> org.springframework.boot </のgroupId> <たartifactId>ばねブートスタータデータRedisの</たartifactId> </依存> <依存性> <のgroupId> org.springframework.boot < /のgroupId> <たartifactId>春・ブート・スターター・ウェブ</たartifactId> </依存関係> <! -春のセッション核心依赖- > <依存> <groupIdを> org.springframework.session </ groupIdを> <たartifactId>春・セッション・コア</たartifactId> </依存関係> <!--springセッションが依存操作をRedisの- > <依存> <のgroupId> org.springframework.session </のgroupId> <たartifactId>スプリングセッションデータRedisの</たartifactId> </依存> <依存性> <のgroupId> org.springframework.boot </のgroupId> <たartifactId> spring-ブートスタータ試験</たartifactId> <スコープ>テスト</スコープ> <除外> <除外> <のgroupId> org.junit.vintage </のgroupId> <たartifactId> JUnitのヴィンテージエンジン</たartifactId> </排除> </除外> </依存関係> </依存関係>
@GetMapping(" /取得" ) パブリック文字列インデックス(HttpServletRequestのリクエスト){ オブジェクト名 =でrequest.getSession()のgetAttribute(" 名" ); リターン名!= nullの?「成功」:「偽」。 } (@GetMapping " /セット" ) パブリック文字列インデックス(HttpServletRequestのリクエスト、HttpServletResponseの応答){ オブジェクト名 =でrequest.getSession()のgetAttribute("); もし(ヌル == 名) 。でrequest.getSession()のsetAttribute(" 名前"、" ZS " ); 戻る 「セットの成功を」。 }
二つのプロジェクト、ポート8080で1、ポート8081、シミュレーションクラスタ環境を実行しているSpringboot
8080,8081二つのプロジェクトのアクセスポートは、セッションの記述は現時点では存在しない、間違っています
この時点で、セッションの後、手動で設定した値、取得するために別の訪問、成功への復帰
アクセスポート8081プロジェクト
成功を返し、セッションの取得の成功を説明するために、
値だけ堆積Redisのセッションが成功したのクラスタを取得するためにセッション記述は、あります。