我们正在尝试在运行单个服务器的elasticbeanstalk环境中为tomcat 7配置dynamodb session manager。
我们可以看到会话数据被定期备份到dynamodb,但偶尔会将旧会话数据(针对同一会话)从dynamodb中加载回来。在我们的应用程序中,这通过加载您正在查看的上一个项目(该项目存储在会话中)来表现。 JSESSIONID cookie保持不变,客户端保持相同的会话。如果我们关闭会话管理器,问题就解决了。
以下是context.xml的内容
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Manager
className="com.amazonaws.services.dynamodb.sessionmanager.DynamoDBSessionManager"
Table="SessionTable"
RegionId="eu-west-1"/>
</Context>
我们已尝试将maxIdleBackup和maxIdleSwap设置为tomcat 7 docs中定义的高数字,但无效。
如果我们将maxIdleBackup和maxIdleSwap设置为零,则会减少错误,因为会话数据会更频繁地备份到dynamodb,但这并不能解决问题。
是什么导致tomcat从Store加载会话数据?我的理解是它只应该从商店加载,如果它根本不可用(即客户端点击不同的tomcat)。
答案 0 :(得分:0)
我相信你会遇到issue #6
中提到的实现的异步性质(以及粘性会话的隐含需求)如果您没有使用粘性会话,我建议您选择同步的Redis approach
答案 1 :(得分:0)
最后我们使用了没有此问题的JDBCStore。我希望在未来有更多时间回到这个问题。