Я хочу, чтобы HttpSessions Tomcat был на диске, чтобы его можно было использовать в масштабируемой облачной среде. Дело в том, что будет несколько узлов Tomcat (в облаке PaaS), а клиенты могут быть направлены на любой из них. Мы хотим сохранять и загружать сеансы из общего дискового блока.Tomcat - Как перенести сеанс непосредственно на диск с помощью PersistentManager + FileStore
я настроил PersistentManager таким образом:
context.xml
<Manager className="org.apache.catalina.session.PersistentManager">
<Store className="org.apache.catalina.session.FileStore" directory="c:/somedir"/>
</Manager>
Проблема заключается в том, что сессии, по-видимому, никогда не выгружаются на диск.
Я изменил <Manager>
конфигурации при добавлении maxIdleBackup:
<Manager className="org.apache.catalina.session.PersistentManager maxIdleBackup="1">
Таким образом, он занимает почти минуту, пока я не вижу сеанс сохраняется на диске. Как ни странно, документ утверждает, что он должен принять вокруг второй:
maxIdleBackup: Временной интервал (в секундах) с момента последнего доступа к сеанса, прежде чем он имеет право на время сохранялось на сессии магазина или -1, чтобы отключить эту функцию. По умолчанию эта функция отключена .
Другие конфигурации:
После documentation я установить свойство системы
org.apache.catalina.session.StandardSession.ACTIVITY_CHECK -> true
Есть ли способ, чтобы немедленно промойте сессию на диск? Возможно ли, что любое изменение в сеансе также сохраняется сразу?
UPDATE:
Я пытался заставить пассивирование сессии и промывке на диск с maxIdleBackup="0" minIdleSwap="0" maxIdleSwap="1"
, но он по-прежнему занимает почти минуту.
Существует большая разница между «никогда» и «почти минуту». Я бы предположил, что единица времени - это минуты, а не секунды. Но это действительно работает. Я использую эту технику для масштабирования, а не для многоадресной передачи, которая помещает каждую сессию в каждый Tomcat, что кажется полным безумием для меня, и я счастлив терпеть случайную потерю валюты. – EJP