开发者社区> 问答> 正文

关于nginx+tomcat+memcached集群中session的问题:报错

在解决nginx+tomcat+memcached集群session的问题中,我在本机(Windows)测试,nginx+2个tomcat,将memcached添加到系统服务中并启动,分别添加memcached的jar包到tomcat的lib中,配置两个tomcat的context.xml,启动两个tomcat,访问页面报错,起初以为是版本的问题,换了好多版本的jar包,问题依旧,求高人指点。

context.xml配置如下:

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
        memcachedNodes="n1:127.0.0.1:11211"
        requestUriIgnorePattern=".*/.(png|gif|jpg|css|js)$"
        sessionBackupAsync="false"
        sessionBackupTimeout="100"
        transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
        copyCollectionsForSerialization="false" />

错误信息如下:

java.lang.NoSuchMethodError: net.spy.memcached.MemcachedClient.set(Ljava/lang/String;ILjava/lang/Object;)Lnet/spy/memcached/internal/OperationFuture;
	at de.javakaffee.web.msm.BackupSessionTask.storeSessionInMemcached(BackupSessionTask.java:227)
	at de.javakaffee.web.msm.BackupSessionTask.doBackupSession(BackupSessionTask.java:194)
	at de.javakaffee.web.msm.BackupSessionTask.call(BackupSessionTask.java:119)
	at de.javakaffee.web.msm.BackupSessionTask.call(BackupSessionTask.java:50)
	at de.javakaffee.web.msm.BackupSessionService$SynchronousExecutorService.submit(BackupSessionService.java:346)
	at de.javakaffee.web.msm.BackupSessionService.backupSession(BackupSessionService.java:205)
	at de.javakaffee.web.msm.MemcachedSessionService.backupSession(MemcachedSessionService.java:1059)
	at de.javakaffee.web.msm.RequestTrackingHostValve.backupSession(RequestTrackingHostValve.java:229)
	at de.javakaffee.web.msm.RequestTrackingHostValve.invoke(RequestTrackingHostValve.java:154)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Thread.java:619)

展开
收起
kun坤 2020-06-05 23:07:37 408 0
1 条回答
写回答
取消 提交回答
  • 我感觉jar文件中的方法重复了。######回复 @IceRainYWC : 有可能jar之间冲突,也有可能和源码中的冲突了。######我试了试,好像不是jar文件中的方法重复。######

    tomcat 版本多少? 这个问题好像网上挺多。

    ######Tomcat 6.0######我也遇到了同样的问题,正在解决。###### 用这个  spymemcached-2.8.4.jar   不用 memcached-2.6.jar  ,昨天晚上使出来的,第一个没有问题,第二个就会报你的这个错 ######回复 @海空天阔007 : 删掉memcached 2.6.留 下spymemcache-2.8.4.jar或更高版本 是包冲突 了######为啥我这改成你这样了还报这个错呢######

    引用来自“weizc”的答案

    用这个  spymemcached-2.8.4.jar   不用 memcached-2.6.jar  ,昨天晚上使出来的,第一个没有问题,第二个就会报你的这个错
    谢谢
    ######客气######

    麻烦问下,你们这个多次刷新,sessionId不会变吗?

    为什么我的页面,链接快速F5刷新,sessionId就会改变呢.

    ######我的也是常按F5 sessionid也会变.............你的问题解决了没有............######

    引用来自“打到日本”的答案

    麻烦问下,你们这个多次刷新,sessionId不会变吗?

    为什么我的页面,链接快速F5刷新,sessionId就会改变呢.

    这个没试过,不太清楚,但是你Tomcat做集群的话SessionId应该是同步的不会变的。

    ######

    引用来自“IceRainYWC”的答案

    引用来自“打到日本”的答案

    麻烦问下,你们这个多次刷新,sessionId不会变吗?

    为什么我的页面,链接快速F5刷新,sessionId就会改变呢.

    这个没试过,不太清楚,但是你Tomcat做集群的话SessionId应该是同步的不会变的。

    我也感觉比较奇怪,我在47,48上部署了两个tomcat,和两个memcached,然后轮流关闭47,48,然后ctrl+F5刷新页面,seseion为这样:

    6354E39FE644EA4D3B4C28755E6E87D0-n47.jvm47
    B2909ECCDA90D7F97D3CCCF3F8175A0E-n48.jvm48
    C3A6A59D251CFE7D8E3241E9FAE649B1-n47.jvm47

    大家认为这正常吗

    ######不正常.....关闭一个服务器....sessionid不会变........我的是这样.....######

    引用来自“打到日本”的答案

    麻烦问下,你们这个多次刷新,sessionId不会变吗?

    为什么我的页面,链接快速F5刷新,sessionId就会改变呢.

    同问,有没有解决了的大虾,给指条明路
    ######

    我是Tomcat7配置也出现了楼主同样的问题,请问楼主解决了没?我的情况是第一次用页面访问就会报这个错,以后就不报错了。

    2020-06-08 11:30:08
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
《Nginx 代理系统常用手册》 立即下载
CentOS Nginx PHP JAVA 多语言镜像使用手 立即下载
CentOS Nginx PHP JAVA多语言镜像使用手册 立即下载