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

RPC泛化调用时碰到的问题 #523

Closed UCSBGauchos closed 5 years ago

UCSBGauchos commented 5 years ago

Describe the bug

使用RPC泛化调用发送复合类型(对象里面套对象,比如这里的people里面套job),用的是UT里的例子

@Test public void testAssembleDTOFromDataSouce8() { GenericObject genericObject = new GenericObject( "cn.com.cathayins.finance.trade.facade.dto.TradeQueryDTO"); genericObject.putField("billNo", "20190220010100101000000000207030"); TenantInfo tenantInfo = new TenantInfo("", "cathay"); genericObject.putField("tenantInfo", tenantInfo); String[] paramTypes = new String[]{"cn.com.cathayins.finance.trade.facade.dto.TradeQueryDTO"}; Object[] parmas = new Object[]{genericObject}; String packageName = "cn.com.cathayins.finance.trade.facade.api.TradeQueryService"; SofaRPCDataSource sofaRPCDataSource = (SofaRPCDataSource) cacheUtil.genericServicePool.get(packageName); sofaRPCDataSource.datasourceModel.setRequestTarget("verifyByBill"); sofaRPCDataSource.datasourceModel.setArgs(parmas); sofaRPCDataSource.datasourceModel.setArgsTypes(paramTypes); Object result = sofaRPCDataSource.callSync(); System.out.println(result); }

参数数据能发送到服务端,但是返回报错,且服务器端没有错误日志。这是中间件的报错日志

2019-02-20 19:29:15.525,,0aa7187a1550662154855100130396,0,main,unknown_error,rpc,invokeType=sync&uid=&protocol=bolt&targetApp=&targetIdc=&targetCity=&paramTypes=cn.com.cathayins.finance.trade.facade.dto.TradeQueryDTO&methodName=$genericInvoke&serviceName=cn.com.cathayins.finance.trade.facade.api.TradeQueryService:1.0&targetUrl=10.167.24.129:12200&targetZone=&,,com.alipay.sofa.rpc.core.exception.SofaRpcException at com.alipay.sofa.rpc.transport.bolt.BoltClientTransport.convertToRpcException(BoltClientTransport.java:372) at com.alipay.sofa.rpc.transport.bolt.BoltClientTransport.syncSend(BoltClientTransport.java:268) at com.alipay.sofa.rpc.client.AbstractCluster.doSendMsg(AbstractCluster.java:511) at com.alipay.sofa.rpc.client.AbstractCluster.sendMsg(AbstractCluster.java:482) at com.alipay.sofa.rpc.filter.ConsumerInvoker.invoke(ConsumerInvoker.java:60) at com.alipay.sofa.rpc.filter.ConsumerTracerFilter.invoke(ConsumerTracerFilter.java:69) at com.alipay.sofa.rpc.filter.FilterInvoker.invoke(FilterInvoker.java:96) at com.alipay.sofa.rpc.filter.ConsumerGenericFilter.invoke(ConsumerGenericFilter.java:79) at com.alipay.sofa.rpc.filter.FilterInvoker.invoke(FilterInvoker.java:96) 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:475) 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:75) at com.sun.proxy.$Proxy77.$genericInvoke(Unknown Source) at com.cathay.apollo.engine.common.model.SofaRPCDataSource.callSync(SofaRPCDataSource.java:31) at com.cathay.apollo.engine.entitywarehouse.AssembleTest.testAssembleDTOFromDataSouce8(AssembleTest.java:183) 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 org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75) at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86) at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:252) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191) at org.junit.runner.JUnitCore.run(JUnitCore.java:137) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47) at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242) at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)

Expected behavior

Actual behavior

Steps to reproduce

Minimal yet complete reproducer code (or GitHub URL to code)

Environment

UCSBGauchos commented 5 years ago

求助,是哪里写错了还是配置错了

leizhiyuan commented 5 years ago

你看下~log/bolt/common-error.log 中是否有日志?或者方便的话,将~/logs 目录全部清空,然后重跑一下测试用例。将结果文件打包发一下?

UCSBGauchos commented 5 years ago

谢谢,这是日志。好像端口已经被占用了,会导致这个错么?

2019-02-20 19:10:36,761 ERROR [RemotingServer#97] [main] ERROR: Failed to start the Server! java.net.BindException: Address already in use: bind at sun.nio.ch.Net.bind0(Native Method) at sun.nio.ch.Net.bind(Net.java:433) at sun.nio.ch.Net.bind(Net.java:425) at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223) at io.netty.channel.socket.nio.NioServerSocketChannel.doBind(NioServerSocketChannel.java:127) at io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:554) at io.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.java:1258) at io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:512) at io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:497) at io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.java:980) at io.netty.channel.AbstractChannel.bind(AbstractChannel.java:250) at io.netty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:363) at io.netty.util.concurrent.AbstractEventExecutor.safeExecute$$$capture(AbstractEventExecutor.java:163) at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java) at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:418) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:454) at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:873) at java.lang.Thread.run(Thread.java:748)

leizhiyuan commented 5 years ago

会的。

https://www.sofastack.tech/sofa-rpc/docs/Application-RPC-Config

com.alipay.sofa.rpc.bolt.port # bolt 端口

通过这个配置,改一下其中一个的端口。

UCSBGauchos commented 5 years ago

默认端口是多少,一般建议改成多少。

有哪些情况会导致这个错啊?

leizhiyuan commented 5 years ago

默认是12200,这个错误只可能是本地启动了两个sofarpc的应用

或者是你上一个进程还没有关。

UCSBGauchos commented 5 years ago

但有时候本地启动了两个sofaRPC应用(一个服务provider,一个服务消费者),结果也能正常返回(虽然日志里会报这个错)

leizhiyuan commented 5 years ago

会有未知的问题,取决于哪个先启动。本地启动建议还是先保证端口不要冲突。

leizhiyuan commented 5 years ago

两个进程不能同时绑定一个端口。

你看下~log/bolt/common-error.log 中是否有日志?或者方便的话,将~/logs 目录全部清空,然后重跑一下测试用例。将结果文件打包发一下?

明天还是辛苦提供下这个目录的日志,这样才能判断根本问题。

UCSBGauchos commented 5 years ago

好的,辛苦。日志文件怎么发给你,通过邮件么?

leizhiyuan commented 5 years ago

打个zip包,直接贴在这里就行了。

UCSBGauchos commented 5 years ago

会的。

https://www.sofastack.tech/sofa-rpc/docs/Application-RPC-Config

com.alipay.sofa.rpc.bolt.port # bolt 端口

通过这个配置,改一下其中一个的端口。

前面试了下在,在其中一个sofaRPC应用中的application.properties加入com.alipay.sofa.rpc.bolt.port=12201 调用的时候bolt的common-error.log还是报同样的错,感觉这个配置没生效啊

UCSBGauchos commented 5 years ago

你好,今天试了下,common-error.log里面没有任何错,还是不行,这是我的日志

UCSBGauchos commented 5 years ago

logs.zip

UCSBGauchos commented 5 years ago

com.alipay.sofa.rpc.core.exception.SofaRpcException at com.alipay.sofa.rpc.transport.bolt.BoltClientTransport.convertToRpcException(BoltClientTransport.java:372) at com.alipay.sofa.rpc.transport.bolt.BoltClientTransport.syncSend(BoltClientTransport.java:268) at com.alipay.sofa.rpc.client.AbstractCluster.doSendMsg(AbstractCluster.java:511) at com.alipay.sofa.rpc.client.AbstractCluster.sendMsg(AbstractCluster.java:482) at com.alipay.sofa.rpc.filter.ConsumerInvoker.invoke(ConsumerInvoker.java:60) at com.alipay.sofa.rpc.filter.ConsumerTracerFilter.invoke(ConsumerTracerFilter.java:69) at com.alipay.sofa.rpc.filter.FilterInvoker.invoke(FilterInvoker.java:96) at com.alipay.sofa.rpc.filter.ConsumerGenericFilter.invoke(ConsumerGenericFilter.java:79) at com.alipay.sofa.rpc.filter.FilterInvoker.invoke(FilterInvoker.java:96) 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:475) 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:75) at com.sun.proxy.$Proxy77.$genericInvoke(Unknown Source) at com.cathay.apollo.engine.common.model.SofaRPCDataSource.callSync(SofaRPCDataSource.java:31) at com.cathay.apollo.engine.entitywarehouse.AssembleTest.testAssembleDTOFromDataSouce8(AssembleTest.java:188) 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 org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75) at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86) at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:252) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191) at org.junit.runner.JUnitCore.run(JUnitCore.java:137) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47) at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242) at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)

leizhiyuan commented 5 years ago

你是金融云上用户?我看你日志中很多都是金融云上才有的?

image

如果是云上的,建议走云上工单哈。云上跟开源有一些细微的差别。

UCSBGauchos commented 5 years ago

好的。谢谢