sofastack / sofa-rpc

SOFARPC is a high-performance, high-extensibility, production-level Java RPC framework.
https://www.sofastack.tech/sofa-rpc/docs/Home
Apache License 2.0
3.81k stars 1.17k forks source link

demo 无法运行 #53

Closed xiaowan closed 6 years ago

xiaowan commented 6 years ago

https://github.com/alipay/sofa-rpc/wiki/Getting-Started-With-RPC 按照这个文档里给出的代码,mac上运行异常

NeGnail commented 6 years ago

具体是什么异常啊。

xiaowan commented 6 years ago

异常如下: SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. Sofa-Middleware-Log SLF4J Warn : No log util is usable, Default app logger will be used. Sofa-Middleware-Log SLF4J Warn : No log util is usable, Default app logger will be used. Exception in thread "main" com.alipay.sofa.rpc.core.exception.SofaRpcException: com.alipay.remoting.exception.ConnectionClosedException: Connection closed! the address is 127.0.0.1:9696 at com.alipay.sofa.rpc.transport.bolt.BoltClientTransport.convertToRpcException(BoltClientTransport.java:364) at com.alipay.sofa.rpc.transport.bolt.BoltClientTransport.syncSend(BoltClientTransport.java:271) at com.alipay.sofa.rpc.client.AbstractCluster.doSendMsg(AbstractCluster.java:509) at com.alipay.sofa.rpc.client.AbstractCluster.sendMsg(AbstractCluster.java:480) at com.alipay.sofa.rpc.filter.ConsumerInvoker.invoke(ConsumerInvoker.java:60) at com.alipay.sofa.rpc.filter.RpcReferenceContextFilter.invoke(RpcReferenceContextFilter.java:80) at com.alipay.sofa.rpc.filter.FilterInvoker.invoke(FilterInvoker.java:96) at com.alipay.sofa.rpc.filter.ConsumerExceptionFilter.invoke(ConsumerExceptionFilter.java:37) at com.alipay.sofa.rpc.filter.FilterInvoker.invoke(FilterInvoker.java:96) at com.alipay.sofa.rpc.filter.FilterChain.invoke(FilterChain.java:299) at com.alipay.sofa.rpc.client.AbstractCluster.filterChain(AbstractCluster.java:473) at com.alipay.sofa.rpc.client.FailoverCluster.doInvoke(FailoverCluster.java:66) at com.alipay.sofa.rpc.client.AbstractCluster.invoke(AbstractCluster.java:286) at com.alipay.sofa.rpc.client.ClientProxyInvoker.invoke(ClientProxyInvoker.java:83) at com.alipay.sofa.rpc.proxy.jdk.JDKInvocationHandler.invoke(JDKInvocationHandler.java:74) at com.sun.proxy.$Proxy7.sayHello(Unknown Source) at com.test.java.QuickStartClient.main(QuickStartClient.java:17) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) Caused by: com.alipay.remoting.exception.ConnectionClosedException: Connection closed! the address is 127.0.0.1:9696 at com.alipay.remoting.rpc.RpcResponseResolver.preProcess(RpcResponseResolver.java:99) at com.alipay.remoting.rpc.RpcResponseResolver.resolveResponseObject(RpcResponseResolver.java:56) at com.alipay.remoting.rpc.RpcRemoting.invokeSync(RpcRemoting.java:186) at com.alipay.remoting.rpc.RpcClientRemoting.invokeSync(RpcClientRemoting.java:67) at com.alipay.remoting.rpc.RpcClient.invokeSync(RpcClient.java:350) at com.alipay.sofa.rpc.transport.bolt.BoltClientTransport.doInvokeSync(BoltClientTransport.java:295) at com.alipay.sofa.rpc.transport.bolt.BoltClientTransport.syncSend(BoltClientTransport.java:268) ... 20 more

NeGnail commented 6 years ago

我刚刚又试了一下,在我机器上是没有问题的。 先运行的 QuickStartServer ,然后不要关闭 QuickStartServer ,再运行 QuickStartClient 。 你的操作步骤是这样的吗。

xiaowan commented 6 years ago

是这么操作的,先运行的QuickStartServer,提示如下: SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. Sofa-Middleware-Log SLF4J Warn : No log util is usable, Default app logger will be used. Sofa-Middleware-Log SLF4J Warn : No log util is usable, Default app logger will be used.

NeGnail commented 6 years ago

这个日志是提示使用默认的logger。 能够把你的代码push到某个仓库吗,我运行一下。

xiaowan commented 6 years ago

就demo里的代码原封不动的复制粘贴下来的

xiaowan commented 6 years ago

更换过端口就可以了,不知道为什么

NeGnail commented 6 years ago

是不是机器本地有其它进程占用了9696端口

xiaowan commented 6 years ago

没有,QuickStartServer是正常启动起来的

liangyuanpeng commented 6 years ago

@xiaowan 问题解决了没有?我也有遇到,直接运行sofa-rpc项目中example模块的quickstart代码报错。

QuickStartServer正常启动,启动QuickStartClient进行rpc调用时报错。具体异常栈如下:

/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/bin/java "-javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=59536:/Applications/IntelliJ IDEA.app/Contents/bin" -Dfile.encoding=UTF-8 -classpath /Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/lib/packager.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/lib/tools.jar:/Users/lanren/Documents/repositorys/git/sofa-rpc/example/target/test-classes:/Users/lanren/Documents/repositorys/git/sofa-rpc/all/target/classes:/Users/lanren/Documents/repositorys/git/sofa-rpc/core/common/target/classes:/Users/lanren/Documents/repositorys/git/sofa-rpc/core/exception/target/classes:/Users/lanren/Documents/repositorys/git/sofa-rpc/core/api/target/classes:/Users/lanren/Documents/repositorys/git/sofa-rpc/core-impl/client/target/classes:/Users/lanren/Documents/repositorys/git/sofa-rpc/core-impl/codec/target/classes:/Users/lanren/Documents/repositorys/git/sofa-rpc/core-impl/filter/target/classes:/Users/lanren/Documents/repositorys/git/sofa-rpc/core-impl/log/target/classes:/Users/lanren/Documents/repositorys/git/sofa-rpc/core-impl/proxy/target/classes:/Users/lanren/Documents/repositorys/git/sofa-rpc/core-impl/transport/target/classes:/Users/lanren/Documents/repositorys/git/sofa-rpc/extension-impl/extension-common/target/classes:/Users/lanren/Documents/repositorys/git/sofa-rpc/extension-impl/api-compatible/target/classes:/Users/lanren/Documents/repositorys/git/sofa-rpc/extension-impl/bootstrap-bolt/target/classes:/Users/lanren/Documents/repositorys/git/sofa-rpc/extension-impl/bootstrap-dubbo/target/classes:/Users/lanren/Documents/repositorys/git/sofa-rpc/extension-impl/bootstrap-rest/target/classes:/Users/lanren/Documents/repositorys/git/sofa-rpc/extension-impl/fault-tolerance/target/classes:/Users/lanren/Documents/repositorys/git/sofa-rpc/extension-impl/log-common-tools/target/classes:/Users/lanren/Documents/repositorys/git/sofa-rpc/extension-impl/registry-local/target/classes:/Users/lanren/Documents/repositorys/git/sofa-rpc/extension-impl/registry-zk/target/classes:/Users/lanren/Documents/repositorys/git/sofa-rpc/extension-impl/remoting-bolt/target/classes:/Users/lanren/.m2/repository/com/google/protobuf/protobuf-java/3.1.0/protobuf-java-3.1.0.jar:/Users/lanren/Documents/repositorys/git/sofa-rpc/extension-impl/remoting-resteasy/target/classes:/Users/lanren/.m2/repository/com/alipay/sofa/bolt/1.4.1/bolt-1.4.1.jar:/Users/lanren/.m2/repository/com/alipay/sofa/common/sofa-common-tools/1.0.12/sofa-common-tools-1.0.12.jar:/Users/lanren/.m2/repository/org/slf4j/slf4j-api/1.7.21/slf4j-api-1.7.21.jar:/Users/lanren/.m2/repository/org/javassist/javassist/3.20.0-GA/javassist-3.20.0-GA.jar:/Users/lanren/.m2/repository/io/netty/netty-all/4.1.13.Final/netty-all-4.1.13.Final.jar:/Users/lanren/.m2/repository/com/alipay/sofa/hessian/3.3.0/hessian-3.3.0.jar:/Users/lanren/.m2/repository/org/jboss/resteasy/jaxrs-api/3.0.12.Final/jaxrs-api-3.0.12.Final.jar:/Users/lanren/.m2/repository/org/jboss/resteasy/resteasy-jaxrs/3.0.12.Final/resteasy-jaxrs-3.0.12.Final.jar:/Users/lanren/.m2/repository/org/jboss/spec/javax/annotation/jboss-annotations-api_1.1_spec/1.0.1.Final/jboss-annotations-api_1.1_spec-1.0.1.Final.jar:/Users/lanren/.m2/repository/javax/activation/activation/1.1.1/activation-1.1.1.jar:/Users/lanren/.m2/repository/org/apache/httpcomponents/httpclient/4.3.6/httpclient-4.3.6.jar:/Users/lanren/.m2/repository/commons-logging/commons-logging/1.1.3/commons-logging-1.1.3.jar:/Users/lanren/.m2/repository/commons-codec/commons-codec/1.6/commons-codec-1.6.jar:/Users/lanren/.m2/repository/commons-io/commons-io/2.4/commons-io-2.4.jar:/Users/lanren/.m2/repository/net/jcip/jcip-annotations/1.0/jcip-annotations-1.0.jar:/Users/lanren/.m2/repository/org/apache/httpcomponents/httpcore/4.3.3/httpcore-4.3.3.jar:/Users/lanren/.m2/repository/javax/validation/validation-api/1.1.0.Final/validation-api-1.1.0.Final.jar:/Users/lanren/.m2/repository/org/jboss/resteasy/resteasy-client/3.0.12.Final/resteasy-client-3.0.12.Final.jar:/Users/lanren/.m2/repository/org/jboss/resteasy/resteasy-jackson-provider/3.0.12.Final/resteasy-jackson-provider-3.0.12.Final.jar:/Users/lanren/.m2/repository/org/codehaus/jackson/jackson-core-asl/1.9.12/jackson-core-asl-1.9.12.jar:/Users/lanren/.m2/repository/org/codehaus/jackson/jackson-mapper-asl/1.9.12/jackson-mapper-asl-1.9.12.jar:/Users/lanren/.m2/repository/org/codehaus/jackson/jackson-jaxrs/1.9.12/jackson-jaxrs-1.9.12.jar:/Users/lanren/.m2/repository/org/codehaus/jackson/jackson-xc/1.9.12/jackson-xc-1.9.12.jar:/Users/lanren/.m2/repository/org/jboss/resteasy/resteasy-netty4/3.0.12.Final/resteasy-netty4-3.0.12.Final.jar:/Users/lanren/.m2/repository/com/alibaba/dubbo/2.4.10/dubbo-2.4.10.jar:/Users/lanren/.m2/repository/org/jboss/netty/netty/3.2.5.Final/netty-3.2.5.Final.jar:/Users/lanren/.m2/repository/org/apache/curator/curator-recipes/2.9.1/curator-recipes-2.9.1.jar:/Users/lanren/.m2/repository/org/apache/curator/curator-framework/2.9.1/curator-framework-2.9.1.jar:/Users/lanren/.m2/repository/org/apache/curator/curator-client/2.9.1/curator-client-2.9.1.jar:/Users/lanren/.m2/repository/org/apache/zookeeper/zookeeper/3.4.6/zookeeper-3.4.6.jar:/Users/lanren/.m2/repository/jline/jline/0.9.94/jline-0.9.94.jar:/Users/lanren/.m2/repository/io/netty/netty/3.7.0.Final/netty-3.7.0.Final.jar:/Users/lanren/.m2/repository/com/google/guava/guava/16.0.1/guava-16.0.1.jar:/Users/lanren/.m2/repository/org/slf4j/slf4j-log4j12/1.7.21/slf4j-log4j12-1.7.21.jar:/Users/lanren/.m2/repository/log4j/log4j/1.2.17/log4j-1.2.17.jar:/Users/lanren/.m2/repository/junit/junit/4.10/junit-4.10.jar:/Users/lanren/.m2/repository/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar com.alipay.sofa.rpc.quickstart.QuickStartClient objc[39177]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/bin/java (0x10b7784c0) and /Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/libinstrument.dylib (0x10cfc04e0). One of the two will be used. Which one is undefined. 2018-04-29 03:41:55,789 main INFO [com.alipay.sofa.rpc.context.RpcRuntimeContext:info:102] - Welcome! Loading SOFA RPC Framework : 5.3.1_20180419005237, PID is:39177 2018-04-29 03:41:55,837 main INFO [com.alipay.sofa.rpc.module.ModuleFactory:info:102] - Install Module: fault-tolerance 2018-04-29 03:41:55,863 main INFO [com.alipay.sofa.rpc.bootstrap.DefaultConsumerBootstrap:infoWithApp:122] - Refer consumer config : bolt://com.alipay.sofa.rpc.quickstart.HelloService: with bean id rpc-cfg-0 2018-04-29 03:41:55,938 main INFO [com.alipay.sofa.rpc.client.AllConnectConnectionHolder:infoWithApp:122] - Add provider of com.alipay.sofa.rpc.quickstart.HelloService, size is : 1 Sofa-Middleware-Log SLF4J : Actual binding is of type [ com.alipay.remoting Log4j ] 2018-04-29 03:41:55,972 CLI-CONN-com.alipay.sofa.rpc.quickstart.HelloService-3-T1 INFO [com.alipay.sofa.common.log:report:30] - Sofa-Middleware-Log SLF4J : Actual binding is of type [ com.alipay.remoting Log4j ] Exception in thread "main" com.alipay.sofa.rpc.core.exception.SofaRouteException: RPC-02306: 没有获得服务[com.alipay.sofa.rpc.quickstart.HelloService:1.0]的调用地址,请检查服务是否已经推送 2018-04-29 03:41:59,471 SOFA-RPC-ShutdownHook WARN [com.alipay.sofa.rpc.context.RpcRuntimeContext:warn:137] - SOFA RPC Framework catch JVM shutdown event, Run shutdown hook now. at com.alipay.sofa.rpc.client.AbstractCluster.noAvailableProviderException(AbstractCluster.java:419) at com.alipay.sofa.rpc.client.AbstractCluster.select(AbstractCluster.java:391) at com.alipay.sofa.rpc.client.FailoverCluster.doInvoke(FailoverCluster.java:64) at com.alipay.sofa.rpc.client.AbstractCluster.invoke(AbstractCluster.java:286) at com.alipay.sofa.rpc.client.ClientProxyInvoker.invoke(ClientProxyInvoker.java:83) at com.alipay.sofa.rpc.proxy.jdk.JDKInvocationHandler.invoke(JDKInvocationHandler.java:74) at com.sun.proxy.$Proxy5.sayHello(Unknown Source) at com.alipay.sofa.rpc.quickstart.QuickStartClient.main(QuickStartClient.java:42) 2018-04-29 03:41:59,474 SOFA-RPC-ShutdownHook INFO [com.alipay.sofa.rpc.bootstrap.DefaultConsumerBootstrap:infoWithApp:122] - UnRefer consumer config : bolt://com.alipay.sofa.rpc.quickstart.HelloService: with bean id rpc-cfg-0 2018-04-29 03:41:59,475 SOFA-RPC-ShutdownHook INFO [com.alipay.sofa.rpc.transport.ClientTransportFactory:info:97] - Shutdown all client transport now! 2018-04-29 03:41:59,476 SOFA-RPC-ShutdownHook INFO [com.alipay.sofa.rpc.module.ModuleFactory:info:102] - Uninstall Module: fault-tolerance 2018-04-29 03:41:59,476 SOFA-RPC-ShutdownHook WARN [com.alipay.sofa.rpc.context.RpcRuntimeContext:warn:142] - SOFA RPC Framework has been release all resources ...

Process finished with exit code 1

也是Mac运行。把实例代码拿到新的项目运行也会这样。 jdk1.8, sofa-rpc版本是5.3.1

liangyuanpeng commented 6 years ago

QuickStartServer运行日志如下:

/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/bin/java "-javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=60714:/Applications/IntelliJ IDEA.app/Contents/bin" -Dfile.encoding=UTF-8 -classpath /Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/lib/packager.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/lib/tools.jar:/Users/lanren/Documents/repositorys/git/sofa-rpc/example/target/test-classes:/Users/lanren/Documents/repositorys/git/sofa-rpc/all/target/classes:/Users/lanren/Documents/repositorys/git/sofa-rpc/core/common/target/classes:/Users/lanren/Documents/repositorys/git/sofa-rpc/core/exception/target/classes:/Users/lanren/Documents/repositorys/git/sofa-rpc/core/api/target/classes:/Users/lanren/Documents/repositorys/git/sofa-rpc/core-impl/client/target/classes:/Users/lanren/Documents/repositorys/git/sofa-rpc/core-impl/codec/target/classes:/Users/lanren/Documents/repositorys/git/sofa-rpc/core-impl/filter/target/classes:/Users/lanren/Documents/repositorys/git/sofa-rpc/core-impl/log/target/classes:/Users/lanren/Documents/repositorys/git/sofa-rpc/core-impl/proxy/target/classes:/Users/lanren/Documents/repositorys/git/sofa-rpc/core-impl/transport/target/classes:/Users/lanren/Documents/repositorys/git/sofa-rpc/extension-impl/extension-common/target/classes:/Users/lanren/Documents/repositorys/git/sofa-rpc/extension-impl/api-compatible/target/classes:/Users/lanren/Documents/repositorys/git/sofa-rpc/extension-impl/bootstrap-bolt/target/classes:/Users/lanren/Documents/repositorys/git/sofa-rpc/extension-impl/bootstrap-dubbo/target/classes:/Users/lanren/Documents/repositorys/git/sofa-rpc/extension-impl/bootstrap-rest/target/classes:/Users/lanren/Documents/repositorys/git/sofa-rpc/extension-impl/fault-tolerance/target/classes:/Users/lanren/Documents/repositorys/git/sofa-rpc/extension-impl/log-common-tools/target/classes:/Users/lanren/Documents/repositorys/git/sofa-rpc/extension-impl/registry-local/target/classes:/Users/lanren/Documents/repositorys/git/sofa-rpc/extension-impl/registry-zk/target/classes:/Users/lanren/Documents/repositorys/git/sofa-rpc/extension-impl/remoting-bolt/target/classes:/Users/lanren/.m2/repository/com/google/protobuf/protobuf-java/3.1.0/protobuf-java-3.1.0.jar:/Users/lanren/Documents/repositorys/git/sofa-rpc/extension-impl/remoting-resteasy/target/classes:/Users/lanren/.m2/repository/com/alipay/sofa/bolt/1.4.1/bolt-1.4.1.jar:/Users/lanren/.m2/repository/com/alipay/sofa/common/sofa-common-tools/1.0.12/sofa-common-tools-1.0.12.jar:/Users/lanren/.m2/repository/org/slf4j/slf4j-api/1.7.21/slf4j-api-1.7.21.jar:/Users/lanren/.m2/repository/org/javassist/javassist/3.20.0-GA/javassist-3.20.0-GA.jar:/Users/lanren/.m2/repository/io/netty/netty-all/4.1.13.Final/netty-all-4.1.13.Final.jar:/Users/lanren/.m2/repository/com/alipay/sofa/hessian/3.3.0/hessian-3.3.0.jar:/Users/lanren/.m2/repository/org/jboss/resteasy/jaxrs-api/3.0.12.Final/jaxrs-api-3.0.12.Final.jar:/Users/lanren/.m2/repository/org/jboss/resteasy/resteasy-jaxrs/3.0.12.Final/resteasy-jaxrs-3.0.12.Final.jar:/Users/lanren/.m2/repository/org/jboss/spec/javax/annotation/jboss-annotations-api_1.1_spec/1.0.1.Final/jboss-annotations-api_1.1_spec-1.0.1.Final.jar:/Users/lanren/.m2/repository/javax/activation/activation/1.1.1/activation-1.1.1.jar:/Users/lanren/.m2/repository/org/apache/httpcomponents/httpclient/4.3.6/httpclient-4.3.6.jar:/Users/lanren/.m2/repository/commons-logging/commons-logging/1.1.3/commons-logging-1.1.3.jar:/Users/lanren/.m2/repository/commons-codec/commons-codec/1.6/commons-codec-1.6.jar:/Users/lanren/.m2/repository/commons-io/commons-io/2.4/commons-io-2.4.jar:/Users/lanren/.m2/repository/net/jcip/jcip-annotations/1.0/jcip-annotations-1.0.jar:/Users/lanren/.m2/repository/org/apache/httpcomponents/httpcore/4.3.3/httpcore-4.3.3.jar:/Users/lanren/.m2/repository/javax/validation/validation-api/1.1.0.Final/validation-api-1.1.0.Final.jar:/Users/lanren/.m2/repository/org/jboss/resteasy/resteasy-client/3.0.12.Final/resteasy-client-3.0.12.Final.jar:/Users/lanren/.m2/repository/org/jboss/resteasy/resteasy-jackson-provider/3.0.12.Final/resteasy-jackson-provider-3.0.12.Final.jar:/Users/lanren/.m2/repository/org/codehaus/jackson/jackson-core-asl/1.9.12/jackson-core-asl-1.9.12.jar:/Users/lanren/.m2/repository/org/codehaus/jackson/jackson-mapper-asl/1.9.12/jackson-mapper-asl-1.9.12.jar:/Users/lanren/.m2/repository/org/codehaus/jackson/jackson-jaxrs/1.9.12/jackson-jaxrs-1.9.12.jar:/Users/lanren/.m2/repository/org/codehaus/jackson/jackson-xc/1.9.12/jackson-xc-1.9.12.jar:/Users/lanren/.m2/repository/org/jboss/resteasy/resteasy-netty4/3.0.12.Final/resteasy-netty4-3.0.12.Final.jar:/Users/lanren/.m2/repository/com/alibaba/dubbo/2.4.10/dubbo-2.4.10.jar:/Users/lanren/.m2/repository/org/jboss/netty/netty/3.2.5.Final/netty-3.2.5.Final.jar:/Users/lanren/.m2/repository/org/apache/curator/curator-recipes/2.9.1/curator-recipes-2.9.1.jar:/Users/lanren/.m2/repository/org/apache/curator/curator-framework/2.9.1/curator-framework-2.9.1.jar:/Users/lanren/.m2/repository/org/apache/curator/curator-client/2.9.1/curator-client-2.9.1.jar:/Users/lanren/.m2/repository/org/apache/zookeeper/zookeeper/3.4.6/zookeeper-3.4.6.jar:/Users/lanren/.m2/repository/jline/jline/0.9.94/jline-0.9.94.jar:/Users/lanren/.m2/repository/io/netty/netty/3.7.0.Final/netty-3.7.0.Final.jar:/Users/lanren/.m2/repository/com/google/guava/guava/16.0.1/guava-16.0.1.jar:/Users/lanren/.m2/repository/org/slf4j/slf4j-log4j12/1.7.21/slf4j-log4j12-1.7.21.jar:/Users/lanren/.m2/repository/log4j/log4j/1.2.17/log4j-1.2.17.jar:/Users/lanren/.m2/repository/junit/junit/4.10/junit-4.10.jar:/Users/lanren/.m2/repository/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar com.alipay.sofa.rpc.quickstart.QuickStartServer objc[39193]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/bin/java (0x10b3ad4c0) and /Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/libinstrument.dylib (0x10cbf54e0). One of the two will be used. Which one is undefined. 2018-04-29 03:48:41,575 main INFO [com.alipay.sofa.rpc.context.RpcRuntimeContext:info:102] - Welcome! Loading SOFA RPC Framework : 5.3.1_20180419005237, PID is:39193 2018-04-29 03:48:41,617 main INFO [com.alipay.sofa.rpc.module.ModuleFactory:info:102] - Install Module: fault-tolerance 2018-04-29 03:48:41,647 main INFO [com.alipay.sofa.rpc.bootstrap.DefaultProviderBootstrap:infoWithApp:122] - Export provider config : com.alipay.sofa.rpc.quickstart.HelloService: with bean id rpc-cfg-0 Sofa-Middleware-Log SLF4J : Actual binding is of type [ com.alipay.remoting Log4j ] 2018-04-29 03:48:41,873 main INFO [com.alipay.sofa.common.log:report:30] - Sofa-Middleware-Log SLF4J : Actual binding is of type [ com.alipay.remoting Log4j ]

khotyn commented 6 years ago

@liangyuanpeng 可否在你的服务端启动之后,尝试 telnet localhost 12200 看下时候可以连上?

liangyuanpeng commented 6 years ago

@khotyn quickstart代码模块显示设置了端口为9696,这个时候telnet 9696端口没问题,telnet 12200的话不通,显示的设置服务端端口为12200的话,telnet 12200是可以通的, 如果不显示的使用setport方法设置端口的话,虽然注释写的默认12200端口,但是启动服务端后,telnet 12200端口是不通的,并且客户端指定直连地址为 bolt://127.0.0.1:12200 在获取HelloService引用对象的时候报错。日志依然是没有获取到服务的调用地址,如下:

Exception in thread "main" com.alipay.sofa.rpc.core.exception.SofaRouteException: RPC-02306: 没有获得服务[com.alipay.sofa.rpc.quickstart.HelloService:1.0]的调用地址,请检查服务是否已经推送

最后我在debug启动服务端看了一下,虽然注释写的默认端口是12200,其实默认端口是22000。 在sofa-rpc-common模块中资源文件夹下rpc-config-default.json中配置的server.port.start属性,值是22000。 这个时候启动QuickStartClient,直连地址使用bolt://127.0.0.1:22000依然报错,报错日志跟上面是一样的。

Exception in thread "main" com.alipay.sofa.rpc.core.exception.SofaRouteException: RPC-02306: 没有获得服务[com.alipay.sofa.rpc.quickstart.HelloService:1.0]的调用地址,请检查服务是否已经推送

NeGnail commented 6 years ago

@liangyuanpeng 9696端口在本地有被其它进程占用吗。

leizhiyuan commented 6 years ago

@liangyuanpeng 麻烦直接把你的代码 push 到你的 github 仓库吧,我们来运行下看看.

liangyuanpeng commented 6 years ago

@NeGnail 沒有被其他进程占用。 @leizhiyuan 我没有新写自己的代码,我运行的是sofa-rpc-example项目中com.alipay.sofa.rpc.quickstart包下的QuickStartServer和QuickStartClient。 启动流程是这样的,先启动QuickStartServer,保持开启状态,然后启动QuickStartClient类,就报错了。

   Exception in thread "main" com.alipay.sofa.rpc.core.exception.SofaRouteException: RPC-02306: 没有获得服务[com.alipay.sofa.rpc.quickstart.HelloService:1.0]的调用地址,请检查服务是否已经推送 

运行环境是10.13版本mac下的idea。

同步一下我调试代码获取到的信息 QuickStartClient启动的时候设置了直连,但是运行到extension-impl项目中extension-common项目模块的DefaultClientProxyInvoker类的decorateRequest方法的

    RpcInvokeContext invokeCtx = RpcInvokeContext.peekContext();

这一行代码的时候获取到了null对象,以至于在运行到sofa-rpc-core-impl项目的AbstractCluster类的select方法根据key RpcConstants.HIDDEN_KEY_PINPOINT获取直连地址的时候获取不到生产者ProviderInfo对象,最终执行了

   throw noAvailableProviderException(message.getTargetServiceUniqueName()); 

抛出了异常 不知道我这样的分析对不对呢

leizhiyuan commented 6 years ago

@liangyuanpeng 跟这个没关系,你按如下debug 1.使用9696端口,开启服务端,telnet 端口,看下能否 telnet 成功. 2.debug 客户端. 设置了 direct url(direct url 的端口记得设置对,也是9696) debug 代码位置

com.alipay.sofa.rpc.client.FailoverCluster#doInvoke

这个方法中的

            ProviderInfo providerInfo = select(request, invokedProviderInfos);

走完这行,看下这个 providerInfo 是否有,并贴 出值,同时继续 debug 这个方法中

com.alipay.sofa.rpc.client.AbstractCluster#sendMsg

        ClientTransport clientTransport = connectionHolder.getAvailableClientTransport(providerInfo);

,这个逻辑可以走进去 debug 下, 看下从连接池中获取的clientTransport是否 ok

liangyuanpeng commented 6 years ago

@leizhiyuan 1.使用9696端口,开启服务端,端口可以telnet 成功 2.代码执行到

 ProviderInfo providerInfo = select(request, invokedProviderInfos);

抛出异常,方法执行情况如下:

执行到

    targetIP = (String) RpcInternalContext.getContext().getAttachment(RpcConstants.HIDDEN_KEY_PINPOINT);

获取到的直连targetIP为空,继续执行

    ClientTransport transport = selectByProvider(message, providerInfo);

transport对象为空,退出循环,执行抛出异常代码行:

      throw noAvailableProviderException(message.getTargetServiceUniqueName());
NeGnail commented 6 years ago

@liangyuanpeng debug ClientTransport transport = selectByProvider(message, providerInfo);这行的时候,看一下ConnectionHolder这个类里面的 aliveConnectionsretryConnections值。

liangyuanpeng commented 6 years ago

@NeGnail 都是空的,size=0

leizhiyuan commented 6 years ago

.setDirectUrl("bolt://127.0.0.1:9696"); // 指定直连地址 指定了这种地址

先 debug 客户端的

com.alipay.sofa.rpc.bootstrap.DefaultConsumerBootstrap#subscribe

这个方法.预期会在地址管理器中将设置的 directUrl 放进去.

然后

应该在com.alipay.sofa.rpc.client.router.DirectUrlRouter#route

这个路由链中取到地址的. debug 一下这个方法.

liangyuanpeng commented 6 years ago

@leizhiyuan com.alipay.sofa.rpc.client.router.DirectUrlRouter#route方法执行情况

providerInfos = current;

方法返回的providerInfos size=1,也就是设置的bolt://127.0.0.1:9696,

originUrl=bolt://127.0.0.1:9696, host="127.0.0.1" port=9696

leizhiyuan commented 6 years ago

@liangyuanpeng 那下面继续看

应该在com.alipay.sofa.rpc.client.router.DirectUrlRouter#route

的结果呢.

liangyuanpeng commented 6 years ago

@leizhiyuan 结果是正常的,

if (CommonUtils.isEmpty(providerInfos)) { throw noAvailableProviderException(message.getTargetServiceUniqueName()); } if (CommonUtils.isNotEmpty(invokedProviderInfos) && providerInfos.size() > invokedProviderInfos.size()) { // 总数大于已调用数 providerInfos.removeAll(invokedProviderInfos);// 已经调用异常的本次不再重试 }

两个判断代码都正常执行

leizhiyuan commented 6 years ago

ok, 那你继续 debug,最终是

com.alipay.sofa.rpc.client.AbstractCluster#select(com.alipay.sofa.rpc.core.request.SofaRequest, java.util.List<com.alipay.sofa.rpc.client.ProviderInfo>)

这个方法走到的时候.

应该进入这段逻辑,并且providerInfos 是一个.(你看到的那个 targetUrl为空是合理的, 不是这个 directurl)

  do {
                // 再进行负载均衡筛选
                providerInfo = loadBalancer.select(message, providerInfos);

//上面这一行走完应该providerInfo不为空.
                ClientTransport transport = selectByProvider(message, providerInfo);
//重点 debug 下上面这里.
                if (transport != null) {
                    return providerInfo;
                }
                providerInfos.remove(providerInfo);
            } while (!providerInfos.isEmpty());

你重点执行这个代码.

NeGnail commented 6 years ago

‘selectByProvider(message, providerInfo);’ 这个 @liangyuanpeng 之前已经debug过了,是空。

应该是直连地址生效了,但是连接没有建立。 ‘com.alipay.sofa.rpc.client.AbstractCluster#updateAllProviders’ 看一下这个方法,跟下里面的这两行代码,会分别将直连的‘bolt://127.0.0.1:9696’的地址和连接生效到缓存中: addressHolder.updateAllProviders(providerGroups); connectionHolder.updateAllProviders(providerGroups);

leizhiyuan commented 6 years ago

怀疑是客户建联过程比较慢,调用的时候,建联没有成功.在等待重试期间的调用失败.

@liangyuanpeng

麻烦将QuickStartClient 代码修改如下.再测试下.

public class QuickStartClient {

    public static void main(String[] args) {

        ConsumerConfig<HelloService> consumerConfig = new ConsumerConfig<HelloService>()
            .setInterfaceId(HelloService.class.getName()) // 指定接口
            .setProtocol("bolt") // 指定协议
            .setDirectUrl("bolt://127.0.0.1:12200"); // 指定直连地址

        HelloService helloService = consumerConfig.refer();

        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        while (true) {
            try {
                System.out.println(helloService.sayHello("world"));
                Thread.sleep(2000);
            } catch (Exception e) {

            }
        }
    }
}
liangyuanpeng commented 6 years ago

@NeGnail 执行

addressHolder.updateAllProviders(providerGroups);

正常,执行

 connectionHolder.updateAllProviders(providerGroups);

创建连接的时候,线程池关闭了连接还没有建立好。 @leizhiyuan 的怀疑是对的,让rpc慢一点调用就正常了。

leizhiyuan commented 6 years ago

@liangyuanpeng 好的,这个用例我稍后改一下.再有问题开新 issue. 谢谢

NeGnail commented 6 years ago

@liangyuanpeng 也可以用 consumerConfig.setConnectTimeout(10000);。让建立连接的时间等待久一点。就不用再sleep了。

liangyuanpeng commented 6 years ago

@NeGnail 明白了,这种会更好:thumbsup: