2011-01-31 150 views
7

我正在寻找避免内存中会话复制/群集并将会话存储在数据库中的方法。此时使用Tomcat的JDBCStore是无用的,因为它只在数据库中存储非活动会话以保存服务器内存。 有什么建议吗?Tomcat:将会话存储在数据库中

由于前期 费边

+1

出于好奇,你有没有看过Amazon的Elastic Beanstalk?他们提供粘性会话。 – stepanian 2011-09-09 04:46:00

回答

5

如果你不想在它应该被使用的方式来使用会话,那么就不要使用它在所有 - 开发自己的会话对象。它仍然可以实现HttpSession,甚至可以从HttpSession的实现延伸。

您可以使用Filter来包装您的请求,以便它返回您的会话对象而不是标准会话对象。在你的会话中,你可以将内容存储在数据库而不是内存中。

而不是写入数据库,您可以使用Hazelcast - 它提供分布式集合。但我想这将花费与配置会话复制相同的工作量。会话复制并不困难 - 它受到所有容器的支持。

这些都是粗略的指导方针,这项任务并不是微不足道的。我建议坚持使用标准会话使用模式,并且只在真正需要时才将数据存储在数据库中。

为了避免复制的需要,您可以尝试使用粘滞会话 - 即当用户通过负载平衡器定向到服务器时,该用户的每个后续请求都会发送到同一台服务器。

+0

感谢您的快速响应。我的意图是在Microsoft Azure中运行多个Tomcat。粘滞会话的问题在于,它不受Azure的负载平衡器支持。在此云环境中实现会话复制的最简单方法是将会话存储在数据库中。你有HttpSession扩展和Filter的代码示例吗?感谢您的回答 – Fabe 2011-01-31 21:43:44

+0

@Fabe - 我没有例子,对不起。 – Bozho 2011-01-31 21:48:13

3

你可能想看看this project,我宁愿将会话存储在memcached而不是数据库中。