Запрет тайм-аута сеанса узла с Jetty 8 и реплицированных сеансов через MongoDB
Я использую Jetty 8 и в настоящее время у меня есть два экземпляра, настроенных и работающих за балансировщиком нагрузки с циклическим перебором Я настроил его использовать репликацию сессии через MongoDB. Он отлично работает с двумя исключениями. Я включу одно здесь, а другое в другой вопрос.
- Возможно, что сеанс на одном из узлов будет поддерживаться, в то время как тот же сеанс на другом узле истекает. Как только вы попадаете на узел с истекшим сроком действия, поведение будет таким, как если бы сеанс истек, несмотря на то, что пользователь выполнял действия на другом узле.
У кого-нибудь есть предложения? Я собираюсь начать копаться в реализации jetty-nosql, но был бы рад, если бы кто-то смог сэкономить мне время.
1 ответ
Оказывается, что указанное выше поведение связано с ошибкой в менеджере nosqlSession. Он не обновляет время последнего доступа при чтении сеанса из базы данных. Таким образом, если к узлу не был получен доступ в течение периода ожидания сеанса, он сделает недействительным сеанс независимо от того, был ли получен доступ к какому-либо другому узлу. Я подал этот отчет об ошибке: https://bugs.eclipse.org/bugs/show_bug.cgi?id=397193
Мы исправили это путем внесения пользовательских изменений в файлы, указанные в сообщении об ошибке, чтобы время доступа к сеансу обновлялось временем доступа, сохраненным в базе данных, когда сеанс обновлялся из базы данных.