weibocom / motan

A cross-language remote procedure call(RPC) framework for rapid development of high performance distributed services.
Other
5.9k stars 1.78k forks source link

motan版本为0.3.0,NettyChannel send request to server Error #610

Open longshang opened 6 years ago

longshang commented 6 years ago

motan版本为0.3.0,最近异步调用老是报这个错误,时好时坏,请问是什么原因导致的,之前是不会的。

com.weibo.api.motan.exception.MotanServiceException: error_message: NettyChannel send request to server Error: url=motan://192.168.0.150:11004/com.hangtian.ms.export.IEventReceive local=/172.18.0.3:57956 requestId=1586669826621139884 interface=com.hangtian.ms.export.IEventReceive method=sendEvent(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String), status: 503, error_code: 10001,r=null 
at com.weibo.api.motan.transport.netty.NettyChannel.request(NettyChannel.java:101) 
at com.weibo.api.motan.transport.netty.NettyClient.request(NettyClient.java:173) 
at com.weibo.api.motan.transport.netty.NettyClient.request(NettyClient.java:120) 
at com.weibo.api.motan.protocol.rpc.DefaultRpcProtocol$DefaultRpcReferer.doCall(DefaultRpcProtocol.java:171) 
at com.weibo.api.motan.rpc.AbstractReferer.call(AbstractReferer.java:64) 
at com.weibo.api.motan.filter.AccessLogFilter.filter(AccessLogFilter.java:56) 
at com.weibo.api.motan.protocol.support.ProtocolFilterDecorator$1.call(ProtocolFilterDecorator.java:90) 
at com.hangyu.cat.monitor.filter.MotanCatCrossFilter.filter(MotanCatCrossFilter.java:67) 
at com.weibo.api.motan.protocol.support.ProtocolFilterDecorator$1.call(ProtocolFilterDecorator.java:90) 
at com.weibo.api.motan.cluster.ha.FailoverHaStrategy.call(FailoverHaStrategy.java:72) 
at com.weibo.api.motan.cluster.support.ClusterSpi.call(ClusterSpi.java:73) 
at com.weibo.api.motan.proxy.RefererInvocationHandler.invoke(RefererInvocationHandler.java:125) 
at com.sun.proxy.$Proxy115.sendEventAsync(Unknown Source) 
at sun.reflect.GeneratedMethodAccessor2094.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
rayzhang0603 commented 6 years ago

能提供完整的异常栈吗?看看这个异常的caused by是什么

rayzhang0603 commented 6 years ago

一般出现这个异常是没有发送成功,可能跟网络因素有关

longshang commented 6 years ago

你好,如下:

com.weibo.api.motan.exception.MotanServiceException: error_message: NettyChannel send request to server Error: url=motan://192.168.0.150:11004/com.hangtian.ms.export.IEventReceive local=/172.18.0.3:34918 requestId=1586671863068978165 interface=com.hangtian.ms.export.IEventReceive method=sendEvent(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String), status: 503, error_code: 10001,r=null 
at com.weibo.api.motan.transport.netty.NettyChannel.request(NettyChannel.java:101) 
at com.weibo.api.motan.transport.netty.NettyClient.request(NettyClient.java:173) 
at com.weibo.api.motan.transport.netty.NettyClient.request(NettyClient.java:120) 
at com.weibo.api.motan.protocol.rpc.DefaultRpcProtocol$DefaultRpcReferer.doCall(DefaultRpcProtocol.java:171) 
at com.weibo.api.motan.rpc.AbstractReferer.call(AbstractReferer.java:64) 
at com.weibo.api.motan.filter.AccessLogFilter.filter(AccessLogFilter.java:56) 
at com.weibo.api.motan.protocol.support.ProtocolFilterDecorator$1.call(ProtocolFilterDecorator.java:90) 
at com.hangtian.cat.monitor.filter.MotanCatCrossFilter.filter(MotanCatCrossFilter.java:67) 
at com.weibo.api.motan.protocol.support.ProtocolFilterDecorator$1.call(ProtocolFilterDecorator.java:90) 
at com.weibo.api.motan.cluster.ha.FailoverHaStrategy.call(FailoverHaStrategy.java:72) 
at com.weibo.api.motan.cluster.support.ClusterSpi.call(ClusterSpi.java:73) 
at com.weibo.api.motan.proxy.RefererInvocationHandler.invoke(RefererInvocationHandler.java:125) 
at com.sun.proxy.$Proxy115.sendEventAsync(Unknown Source) 
at sun.reflect.GeneratedMethodAccessor2094.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333) 
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) 
at com.sun.proxy.$Proxy89.sendEventAsync(Unknown Source) 
at com.hangtian.jersey.filter.EventFilter.filter(EventFilter.java:81) 
at org.glassfish.jersey.server.ContainerFilteringStage.apply(ContainerFilteringStage.java:132) 
at org.glassfish.jersey.server.ContainerFilteringStage.apply(ContainerFilteringStage.java:68) 
at org.glassfish.jersey.process.internal.Stages.process(Stages.java:197) 
at org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:318) 
at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271) 
at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267) 
at org.glassfish.jersey.internal.Errors.process(Errors.java:315) 
at org.glassfish.jersey.internal.Errors.process(Errors.java:297) 
at org.glassfish.jersey.internal.Errors.process(Errors.java:267) 
at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317) 
at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305) 
at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154) 
at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:473) 
at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:427) 
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:388) 
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:341) 
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:228) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 
at org.apache.catalina.filters.CorsFilter.handleSimpleCORS(CorsFilter.java:294) 
at org.apache.catalina.filters.CorsFilter.doFilter(CorsFilter.java:157) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80) 
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) 
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:799) 
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) 
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1457) 
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
at java.lang.Thread.run(Thread.java:748) 
Caused by: java.nio.channels.ClosedChannelException 
at org.jboss.netty.channel.socket.nio.NioWorker.cleanUpWriteBuffer(NioWorker.java:643) 
at org.jboss.netty.channel.socket.nio.NioWorker.writeFromUserCode(NioWorker.java:370) 
at org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink.eventSunk(NioClientSocketPipelineSink.java:117) 
at org.jboss.netty.channel.Channels.write(Channels.java:632) 
at org.jboss.netty.handler.codec.oneone.OneToOneEncoder.handleDownstream(OneToOneEncoder.java:70) 
at org.jboss.netty.channel.Channels.write(Channels.java:611) 
at org.jboss.netty.channel.Channels.write(Channels.java:578) 
at org.jboss.netty.channel.AbstractChannel.write(AbstractChannel.java:251) 
at com.weibo.api.motan.transport.netty.NettyChannel.request(NettyChannel.java:70) 
... 62 more 
longshang commented 6 years ago

Caused by: java.nio.channels.ClosedChannelException。 客户端配置如下: <motan:referer id="IEventReceive" group="hy-ms" interface="com.hangtian.ms.export.IEventReceiveAsync" connectTimeout="300" requestTimeout="300" basicReferer="motanClientBasicConfig" filter="catCross" retries="0" />

rayzhang0603 commented 6 years ago

这个异常的前面应该还有超时的异常吧?一般这个异常是因为channel被关闭时仍然有数据没有发出时出现,如果网络环境不稳定,建议把requestTimeout适当调大一点,例如1000ms

rayzhang0603 commented 6 years ago

另外,如果业务类型是可以重试的话,建议设置retries=1,这样在偶发异常后会自动选择另外的节点重试,不会影响业务功能

qichangyu commented 6 years ago

本地测试没有任何问题,发布测试环境(阿里云),尼玛,全部都是 NettyChannel send request to server Error

RefererInvocationHandler invoke Error: uri=motan://10.31.24.33:0/cn.yp.service.SupportRuleService requestId=1609557160433287171 interface=cn.yp.service.SupportRuleService method=getRuleResult(cn.yp.entity.IntoParamDO) com.weibo.api.motan.exception.MotanServiceException: error_message: NettyChannel send request to server Error: url=motan://10.31.24.33:8001/cn.yp.service.SupportRuleService local=/10.31.24.33:39662 requestId=1609557160433287171 interface=cn.yp.service.SupportRuleService method=getRuleResult(cn.yp.entity.IntoParamDO), status: 503, error_code: 10001,r=null at com.weibo.api.motan.transport.netty.NettyChannel.request(NettyChannel.java:96) at com.weibo.api.motan.transport.netty.NettyClient.request(NettyClient.java:163) at com.weibo.api.motan.transport.netty.NettyClient.request(NettyClient.java:110) at com.weibo.api.motan.protocol.rpc.DefaultRpcReferer.doCall(DefaultRpcReferer.java:52) at com.weibo.api.motan.rpc.AbstractReferer.call(AbstractReferer.java:64) at com.weibo.api.motan.cluster.ha.FailoverHaStrategy.call(FailoverHaStrategy.java:72) at com.weibo.api.motan.cluster.support.ClusterSpi.call(ClusterSpi.java:73) at com.weibo.api.motan.proxy.AbstractRefererHandler.invokeRequest(AbstractRefererHandler.java:76) at com.weibo.api.motan.proxy.RefererInvocationHandler.invoke(RefererInvocationHandler.java:72) at com.sun.proxy.$Proxy121.getRuleResult(Unknown Source) at cn.yp.into.resource.rules.impl.RuleParamterServiceImpl.ruleParamterVerify(RuleParamterServiceImpl.java:50) at cn.yp.into.resource.impl.UserOcrVerifyServiceImpl.getOcrMessage(UserOcrVerifyServiceImpl.java:104) at cn.yp.into.api.web.authentication.UserOcrVerifyApiController.verifyOcrMessage(UserOcrVerifyApiController.java:102) at sun.reflect.GeneratedMethodAccessor266.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872) at javax.servlet.http.HttpServlet.service(HttpServlet.java:661) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) at javax.servlet.http.HttpServlet.service(HttpServlet.java:742) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:55) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilterInternal(WebRequestTraceFilter.java:110) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:108) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilterInternal(MetricsFilter.java:106) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.boot.web.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:115) at org.springframework.boot.web.support.ErrorPageFilter.access$000(ErrorPageFilter.java:59) at org.springframework.boot.web.support.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:90) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.springframework.boot.web.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:108) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:799) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1457) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748) Caused by: java.nio.channels.ClosedChannelException: null at org.jboss.netty.channel.socket.nio.AbstractNioWorker.cleanUpWriteBuffer(AbstractNioWorker.java:434) at org.jboss.netty.channel.socket.nio.AbstractNioWorker.writeFromUserCode(AbstractNioWorker.java:129) at org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink.eventSunk(NioClientSocketPipelineSink.java:84) at org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendDownstream(DefaultChannelPipeline.java:779) at org.jboss.netty.channel.Channels.write(Channels.java:725) at org.jboss.netty.handler.codec.oneone.OneToOneEncoder.doEncode(OneToOneEncoder.java:71) at org.jboss.netty.handler.codec.oneone.OneToOneEncoder.handleDownstream(OneToOneEncoder.java:59) at org.jboss.netty.channel.DefaultChannelPipeline.sendDownstream(DefaultChannelPipeline.java:591) at org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendDownstream(DefaultChannelPipeline.java:784) at org.jboss.netty.channel.SimpleChannelHandler.writeRequested(SimpleChannelHandler.java:292) at org.jboss.netty.channel.SimpleChannelHandler.handleDownstream(SimpleChannelHandler.java:254) at org.jboss.netty.channel.DefaultChannelPipeline.sendDownstream(DefaultChannelPipeline.java:591) at org.jboss.netty.channel.DefaultChannelPipeline.sendDownstream(DefaultChannelPipeline.java:582) at org.jboss.netty.channel.Channels.write(Channels.java:704) at org.jboss.netty.channel.Channels.write(Channels.java:671) at org.jboss.netty.channel.AbstractChannel.write(AbstractChannel.java:248) at com.weibo.api.motan.transport.netty.NettyChannel.request(NettyChannel.java:65) ... 92 common frames omitted

qichangyu commented 6 years ago

而且全部都是通道关闭,全是这个问题,服气了~ 网络环境没有任何问题