gpt4 book ai didi

java - Tomcat - 如何使用 PersistentManager + FileStore 将 session 立即保存到磁盘

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:08:15 30 4
gpt4 key购买 nike

我想将 Tomcat 的 HttpSession 保存到磁盘,以便它可以在可扩展的云环境中使用。关键是将有许多 Tomcat 节点(在云 PaaS 中),客户端可以定向到其中任何一个。我们希望从共享磁盘单元持久化和加载 session 。

我以这种方式配置了 PersistentManager:

context.xml

<Manager className="org.apache.catalina.session.PersistentManager">
<Store className="org.apache.catalina.session.FileStore" directory="c:/somedir"/>
</Manager>

问题是 session 显然从未刷新到磁盘。

我更改了 <Manager>配置添加 maxIdleBackup:

<Manager className="org.apache.catalina.session.PersistentManager maxIdleBackup="1">

通过这种方式,我几乎花了一分钟时间才看到 session 持久保存到磁盘。奇怪的是,文档指出它应该需要大约一秒钟:

maxIdleBackup: The time interval (in seconds) since the last access to a session before it is eligible for being persisted to the session store, or -1 to disable this feature. By default, this feature is disabled.

其他配置:

documentation 之后我设置了系统属性

org.apache.catalina.session.StandardSession.ACTIVITY_CHECK -> true

有没有办法立即将 session 刷新到磁盘?是否可以立即保留 session 中的任何更改?

更新:

我试图用 maxIdleBackup="0" minIdleSwap="0" maxIdleSwap="1" 强制钝化 session 并刷新到磁盘, 但它仍然需要将近一分钟。

最佳答案

您还可以使用这个 valve,它是 Tomcat 发行版的一部分(至少在版本 8 中):

<Valve className="org.apache.catalina.valves.PersistentValve"/>

此节点必须插入到 <Manager className="org.apache.catalina.session.PersistentManager"> 之前context.xml 中的节点文件。

然后它将使用存储来维护每个 http 请求的 session 。请注意,文档假定同一客户端一次只会发出一个 http 请求。

这将允许您在 Java EE 服务器前使用非粘性 session 负载平衡器。

关于java - Tomcat - 如何使用 PersistentManager + FileStore 将 session 立即保存到磁盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35917945/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com