今天开发微信程序发现一个奇怪的。我的微信调用后台其他系统的二维码功能,但在ios手机下面出现下面的错误,这个错误的原因是找不到对应的方法. 而此刻,如果我用另一个手机点击同样的功能却没有下面的错误,是正常的。这个问题值得研究一番。
验证清单如下,同样的微信后台,为什么结果不一样呢?
iphone5s 有问题,因为这个手机很早就关注了微信公众号的应用。
iphone6s 没有问题,刚关注
红米 note4:没有问题,刚关注
我按照下面的策略进行一一排查
1 排除方案一 重启dubbo
没有效果,还是同样的异常
2 排除方案二 重启zookeeper
没有效果,还是同样的异常
3 排查tomcat
以上两种方案,主要是我对dubbo、zookeeper还不算特别精通,担心是因为他们的缓存所致。既然不是他们的问题,那么问题肯定就出在tomcat。
检查webapps中工程文件,发现代码是最新的,说明程序没有问题。
最后检查ROOT目录,发现问题了,ROOT有完整的wcn的工程文件,不知道是谁放进去的。折腾半天。不过也能说明问题
即使通过设置虚拟目录
<Context debug="0" docBase="wcn" path="" reloadable="true"/>
但原则上他也会去找ROOT根目录,所以才有这样的问题。
16:02:06.645 ERROR com.test.wcn.base.controller.MyInvoiceController - Failed to invoke the method shareQrcodeById in the service com.test.scan.api.service.ScanService. Tried 3 times of the providers [192.168.5.123:10882] (1/1) from the registry 192.168.5.157:2181 on the consumer 192.168.5.149 using the dubbo version 2.8.4. Last error is: Failed to invoke remote method: shareQrcodeById, provider: dubbo://192.168.5.123:10882/com.test.scan.api.service.ScanService?actives=150&anyhost=true&application=WCN&check=false&dubbo=2.8.4&generic=false&interface=com.test.scan.api.service.ScanService&loadbalance=random&methods=updateQrcodeById,insertQrcodeSelective,setDefault,pushQrcode,pushWchatNo,findQrcodeByWchatNo,findQrcodeById,deleteQrcode,shareQrcodeById,findDefaultQrcodeByWchat&organization=test&owner=chenjin&pid=27486&retries=2&revision=1.0.0&side=consumer&timeout=1000×tamp=1484028769544&validation=true&version=1.0.0, cause: com.alibaba.dubbo.rpc.RpcException: com.test.scan.api.service.ScanService.shareQrcodeById(java.lang.String, java.lang.String, java.lang.String)
com.alibaba.dubbo.rpc.RpcException: com.test.scan.api.service.ScanService.shareQrcodeById(java.lang.String, java.lang.String, java.lang.String)
at com.alibaba.dubbo.validation.filter.ValidationFilter.invoke(ValidationFilter.java:54)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
at com.alibaba.dubbo.rpc.filter.ExceptionFilter.invoke(ExceptionFilter.java:64)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
at com.alibaba.dubbo.rpc.filter.TimeoutFilter.invoke(TimeoutFilter.java:42)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
at com.alibaba.dubbo.monitor.support.MonitorFilter.invoke(MonitorFilter.java:75)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
at com.alibaba.dubbo.rpc.protocol.dubbo.filter.TraceFilter.invoke(TraceFilter.java:78)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
at com.alibaba.dubbo.rpc.filter.ContextFilter.invoke(ContextFilter.java:70)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
at com.alibaba.dubbo.rpc.filter.GenericFilter.invoke(GenericFilter.java:132)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
at com.alibaba.dubbo.rpc.filter.ClassLoaderFilter.invoke(ClassLoaderFilter.java:38)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
at com.alibaba.dubbo.rpc.filter.EchoFilter.invoke(EchoFilter.java:38)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
at com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol$1.reply(DubboProtocol.java:113)
at com.alibaba.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.handleRequest(HeaderExchangeHandler.java:84)
at com.alibaba.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.received(HeaderExchangeHandler.java:170)
at com.alibaba.dubbo.remoting.transport.DecodeHandler.received(DecodeHandler.java:52)
at com.alibaba.dubbo.remoting.transport.dispatcher.ChannelEventRunnable.run(ChannelEventRunnable.java:82)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NoSuchMethodException: com.test.scan.api.service.ScanService.shareQrcodeById(java.lang.String, java.lang.String, java.lang.String)
at java.lang.Class.getMethod(Class.java:1678)
at com.alibaba.dubbo.validation.support.jvalidation.JValidator.validate(JValidator.java:99)
at com.alibaba.dubbo.validation.filter.ValidationFilter.invoke(ValidationFilter.java:49)
... 25 more