浏览 6534 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-10-30
最后修改:2012-10-30
功能:解决了tomcat集群session共享的问题,避免使用tomcat session复制. MSM用的是spymemcached我个人不太喜欢,还是喜欢用国人开发的xmemcached项目, 所以基于这个xmemcached依照msm自己完成了一个简单的tomcat sessionManager xmemcached下载地址:http://code.google.com/p/xmemcached/ win32的memcached下载(这个版本比较老了,不支持二进制协议) http://code.jellycan.com/memcached/ 我项目中用的是国人自己编译的memcached_1.4.5(支持二进制协议了,但是还不能使用touch) 所有的东西我都放在附件里了,欢迎大家提意见,有兴趣的可以一起研究. 因为我对session超时这块判断好像还有点问题,还在研究tomcat文档和sessionManger源码中. session共享时需要注意的:memcached保存的对象反序列化时,如果有自定义类的话,需要通过sessionManager获得到具体项目的classloader才能反序列化,否则会出现classNotFound异常,这里困扰了我很久最后搞清楚了! 大家注意看下面的代码 //注意这个:CustomObjectInputStream是tomcat,catalina.jar中的类,目的是可以根据实际的web项目来获得对应的classloader来加载需要反序列化的对象. private ObjectInputStream createObjectInputStream(ByteArrayInputStream bis)throws IOException { Loader loader = null; ClassLoader classLoader = null; if (this._manager.getContainer() != null) { loader = this._manager.getContainer().getLoader(); } if (loader != null) { classLoader = loader.getClassLoader(); } ObjectInputStream ois; if (classLoader != null) { ois = new CustomObjectInputStream(bis,classLoader); } else { ois = new ObjectInputStream(bis); } return ois; } 目前我这个功能已经在项目中使用了. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-10-30
这个我也用过,如果只是为了集群session同步,Xmemcached根本没必要。
|
|
返回顶楼 | |
发表时间:2012-10-30
最后修改:2012-10-30
joe_zhjiang 写道 这个我也用过,如果只是为了集群session同步,Xmemcached根本没必要。
为什么?想听听你的建议,我觉得xmemcached的性能要好很多! 试想一下一个 tomcat集群首先不管 有多少个tomcat 光每次的请求和定时更新session时间的任务就已经要占用很多memcached的连接! 线程的并发是很高的,随着tomcat节点的增加~~~ |
|
返回顶楼 | |
发表时间:2012-10-31
LikeEJB_CC 写道 joe_zhjiang 写道 这个我也用过,如果只是为了集群session同步,Xmemcached根本没必要。
为什么?想听听你的建议,我觉得xmemcached的性能要好很多! 试想一下一个 tomcat集群首先不管 有多少个tomcat 光每次的请求和定时更新session时间的任务就已经要占用很多memcached的连接! 线程的并发是很高的,随着tomcat节点的增加~~~ 我认为:实际上连接不会超过tomcat的服务Thread的。感觉用个连接池足够了。 |
|
返回顶楼 | |
发表时间:2012-11-01
用F5 负载均衡 不需要同步session
|
|
返回顶楼 | |
发表时间:2012-11-01
我是没有自己学习过缓存技术,所以不予评价,不过先下载下来,学习下LZ的思路!
|
|
返回顶楼 | |
发表时间:2012-11-05
LikeEJB_CC 写道 joe_zhjiang 写道 这个我也用过,如果只是为了集群session同步,Xmemcached根本没必要。
为什么?想听听你的建议,我觉得xmemcached的性能要好很多! 试想一下一个 tomcat集群首先不管 有多少个tomcat 光每次的请求和定时更新session时间的任务就已经要占用很多memcached的连接! 线程的并发是很高的,随着tomcat节点的增加~~~ xmemcached是用来操作memcached,假如说要实现当用户还在使用时,强制停用用户,则需要xmemcached操作memcached, 在context.xml配置memcached即可以完成session同步,配置如下: <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:192.168.1.37:11211" requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$" sessionBackupAsync="false" sessionBackupTimeout="100" copyCollectionsForSerialization="false" /> |
|
返回顶楼 | |
发表时间:2012-11-05
joe_zhjiang 写道 LikeEJB_CC 写道 joe_zhjiang 写道 这个我也用过,如果只是为了集群session同步,Xmemcached根本没必要。
为什么?想听听你的建议,我觉得xmemcached的性能要好很多! 试想一下一个 tomcat集群首先不管 有多少个tomcat 光每次的请求和定时更新session时间的任务就已经要占用很多memcached的连接! 线程的并发是很高的,随着tomcat节点的增加~~~ xmemcached是用来操作memcached,假如说要实现当用户还在使用时,强制停用用户,则需要xmemcached操作memcached, 在context.xml配置memcached即可以完成session同步,配置如下: <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:192.168.1.37:11211" requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$" sessionBackupAsync="false" sessionBackupTimeout="100" copyCollectionsForSerialization="false" /> 你好朋友,你说的这个项目我知道,而且我看过这个项目的部分源码. MSM这个项目用的是spymemcached的JAVA客户端,我不喜欢! 我自己用xmemcached做了修改,就是参照你说的这个项目来完成的. |
|
返回顶楼 | |