是否可以在mod_cluster中指定粘性会话持续时间?
我的意思是当一段时间没有活动时,卡住的会话被清除。
我们有一个可分发的应用程序,可以在Web会话中保留对已登录用户的引用。但是在登录时,Web会话复制速度不足以跟随登录请求的请求。因此,如果对于这些请求,平衡器选择尚未复制的节点,则用户将不会进行会话并发生错误。
此功能的另一个用途是在服务器上使用缓存信息时。如果您不使用粘性会话,您将加载缓存在不同服务器中的相同信息的几次。但是如果你使用粘性会话,你将在所有会话生活中与同一台服务器绑定。
提前致谢
Leandro的
答案 0 :(得分:2)
无法在mod_cluster中打开和关闭会话粘性一段时间。其中一个开启或关闭。
IIUC,您实际上是在会话到期或会话失效后。您可以随时以编程方式决定使会话无效,也可以通过设置到期超时来让它过期。
您是否可以详细说明如何使用“会话粘性超时”?如果有意义,我们可以创建一个JIRA并实现一个新功能......
答案 1 :(得分:0)
我找到了解决方案以满足我们的需求。
我在balancer(BALANCER_SESSION_ID_HEADER_NAME
)配置不同的stickysession属性,并在客户端管理平衡器粘性会话持续时间。
我第一次将counter + JSESSIONID
设置为BALANCER_SESSION_ID_HEADER_NAME
。每次花费STICKY_SESSION_TIMEOUT
时,我都会将++counter + JSESSIONID
设置为BALANCER_SESSION_ID_HEADER_NAME
。
客户代码:
if (USE_STICKY_SESSION_TIMEOUT && this.getjSessionId() != null) {
if (this.getLastResponseTime() != 0
&& new Date().getTime() - this.getLastResponseTime() > STICKY_SESSION_TIMEOUT) {
balancerSubsessionCounter++;
}
final String cookie = BALANCER_SESSION_ID_HEADER_NAME + "=" + balancerSubsessionCounter + "-"
+ this.getjSessionId();
this.addCookie(httpPost, cookie);
}
//invoke service
if (USE_STICKY_SESSION_TIMEOUT) {
this.setLastResponseTime(new Date().getTime());
}