当前位置: 首页 > 知识库问答 >
问题:

Tomcat与redisson的非粘性会话

冯德佑
2023-03-14

尝试使用Redis设置一个具有非粘性会话的tomcat集群。

尝试使用:https://github.com/redisson/redisson/wiki/14.-integration%20with%20frameworks#145-spring-session

添加了2个jar文件。使用Tomcat7。

   <Manager className="org.redisson.tomcat.RedissonSessionManager"
                 configPath="${catalina.base}/conf/redisson.yml"
                 readMode="REDIS"
---
sentinelServersConfig:
  idleConnectionTimeout: 10000
  pingTimeout: 1000
  connectTimeout: 10000
  timeout: 3000
  retryAttempts: 3
  retryInterval: 1500
  reconnectionTimeout: 3000
  failedAttempts: 3
  password: null
  subscriptionsPerConnection: 5
  clientName: null
  loadBalancer: !<org.redisson.connection.balancer.RoundRobinLoadBalancer> {}
  subscriptionConnectionMinimumIdleSize: 1
  subscriptionConnectionPoolSize: 50
  slaveConnectionMinimumIdleSize: 10
  slaveConnectionPoolSize: 64
  masterConnectionMinimumIdleSize: 10
  masterConnectionPoolSize: 64
  readMode: "SLAVE"
  subscriptionMode: "SLAVE"
  sentinelAddresses:
  - "redis://redis-sentinel:26379"
  masterName: "redismaster"
  database: 0
threads: 0
nettyThreads: 0
codec: !<org.redisson.codec.JsonJacksonCodec> {}
useLinuxNativeEpoll: false

雷迪斯起来了。它会找到服务器。我没看到任何错误。

现在当我去说经理测试。它将进行循环负载平衡。我登录到第一个服务器并得到一个会话。我刷新,它似乎没有拉出正确的会话,并且表现得像我从未登录过一样。曲奇仍然设置。我刷新了几次回到第一个服务器,但我仍然登录。

你知道我错过了什么吗?

共有1个答案

索卓
2023-03-14

更新:

我的应用程序使用HttpServletRequest.login()方法进行用户登录。此方法使用户打开的上一个会话无效,并在登录后出于安全原因创建新会话。用户登录时会话的改变造成了用户无法登录的问题。当我删除HttpServletRequest.login()方法时,用户可以很好地登录并在登录后维护会话。

简而言之,如果使用HttpServletRequest.login(),Redisson就不能正常工作。

    null

解决方案:如果redisson无法使用当前的catalina managerBase找到会话,那么在redis本身中搜索会话,如果您能够找到它,那么让它可用,并从检索到的会话中填充所有会话属性。此外,如果redis中不存在session,那么redisson可以继续创建新的session。

Tomcat8文件夹中RedissonSession.java文件中的load方法和RedissonSessionManager.java文件中的findSession方法发生了变化。

附言。没有测试最佳性能和其他问题,但到目前为止,这似乎解决了我的问题。任何评论和叉都很感激。

 类似资料:
  • 我想知道粘性和非粘性会议之间的区别。我从网上读到的: 粘滞:只有一个会话对象将在那里。 非粘性会话:每个服务器节点的会话对象

  • 试图用Redisson配置我的JavaEE web项目。 > 在Docker容器中设置Redis,它工作得很好。 通过https://github.com/redisson/redisson/tree/master/redisson-tomcat来配置我的Tomcat。 当我试图运行项目时,它会在错误下面抛出: 我对redisson比较陌生,不知道还需要做些什么才能在我现有的javaEE项目中使用

  • 我使用redisson在运行tomcat V8.5的3个tomcat吊舱中复制spring应用程序的tomcat会话。我还在同一个Kubernetes集群中部署了Redis。下面是我的tomcat context.xml配置 我的redisson配置如下: 当我在所有pod上运行我的应用程序和负载平衡请求时,它会为发送到不同pod的每个请求创建一个新的JSESSIONID cookie 这应该验证

  • 目前,我正在尝试在Google云上创建一个Kubernetes集群,其中包含两个负载平衡器:一个用于后端(在Spring boot中),另一个用于前端(在Angular中),其中每个服务(负载平衡器)与两个副本(POD)通信。为了实现这一点,我创建了以下入口: 上面提到的入口可以使前端应用程序与后端应用程序提供的REST API进行通信。但是,我必须创建粘性会话,以便每个用户都与同一个POD进行通

  • 本文向大家介绍Nginx 连接tomcat时会话粘性问题分析及解决方法,包括了Nginx 连接tomcat时会话粘性问题分析及解决方法的使用技巧和注意事项,需要的朋友参考一下 在多台后台服务器的环境下,我们为了确保一个客户只和一台服务器通信,我们势必使用长连接。使用什么方式来实现这种连接呢,常见的有使用nginx自带的ip_hash来做,我想这绝对不是一个好的办法,如果前端是CDN,或者说一个局域

  • 但我们正面临着这种方法的问题。由于out应用程序主要用于车间,负载通常在短时间内增加(车间开始),每个车间参与者都与前两个实例有一个粘性会话,而新的实例几乎没有。正因为如此,表现一直很差。 第一个想法是:让我们禁用粘性会话。但这破坏了我们的网络套接字,因为它们需要粘性会话(至少这是我读到的)。另一个问题是负载减少。实例关闭,套接字连接也会丢失。 是否有一种方法可以在实例之间转移用户会话,或者让we