我正在阅读一本关于Java Servlets的书,我遇到了HTTPSessionActivationListener
。指定在集群环境中,只能有一个包含特定会话ID的HTTPSession对象。假设集群中有2个节点A和B -
第一个请求转到节点A.这里创建了一个HTTPSession S1以及会话属性,并且响应返回给客户端。 同一客户端发送后续请求。此请求转到节点B.现在会话对象S1从节点A移动到节点B(在节点B中激活并在节点A中钝化)。
在这种情况下,会话对象和属性是否可以序列化?如果它不可序列化会发生什么?
为了计算活动会话的数量,是否应将两个节点中的会话相加以获得实际值?这通常是怎么做的?
另外我猜每个JVM的ServletContext都是唯一的。设置为servletcontext一部分的属性是否已复制到集群的所有节点中的servlet上下文?
答案 0 :(得分:2)
通常我看到人们使用粘性会话(通常由负载均衡器提供,例如ec2 ELB具有此功能:http://shlomoswidler.com/2010/04/elastic-load-balancing-with-sticky-sessions.html),或者会话数据存储在共享存储库中,例如数据库或NoSQL商店。
答案 1 :(得分:1)
春季会议似乎提供了一种名为“集群会话”的功能。它还具有将会话卸载到RedIs或GemFire缓存解决方案的功能。