shenyu icon indicating copy to clipboard operation
shenyu copied to clipboard

[BUG] How does the dubbo plugin proxy the triple protocol (IDL method)

Open james-ok opened this issue 2 years ago • 2 comments

Is there an existing issue for this?

  • [X] I have searched the existing issues

Current Behavior

The agent dubbo3 used the IDL method to publish the triple protocol, and the following error occurred when accessing the service:

{
Code: 500,
Message: Internal Server Error
}

And the parameter received by the server is empty It is normal to use an interface to publish the dubbo protocol

Expected Behavior

normal call

Steps To Reproduce

No response

Environment

ShenYu version(s): 2.5.1
dubbo version: 3.1.8

Debug logs

2023-07-24 16:00:34 [shenyu-netty-nio-3] INFO org.apache.shenyu.plugin.apache.dubbo.cache.ApacheDubboConfigCache - buildN init apache dubbo reference success there meteData is :MetaData{id='1683307035019808768', appName='dubbo-demo-personal', contextPath='null', path='/personal/getUser', rpcType='dubbo', serviceName='com.example.dubbo.demo.personal.PersonalService', methodName='getUser', parameterTypes='com.example.dubbo.demo.personal.UserReq', rpcExt='{"loadbalance":"random","retries":2,"timeout":3000,"sent":false,"cluster":"failover","protocol":"tri"}', enabled=true} 2023-07-24 16:00:34 [shenyu-netty-nio-3] INFO org.apache.dubbo.registry.zookeeper.ZookeeperRegistry - [DUBBO] Unsubscribe: tri://192.168.5.53/com.example.dubbo.demo.personal.PersonalService?application=shenyu_proxy&async=true&background=false&category=providers,configurators,routers&check=false&cluster=failover&corethreads=0&dispatcher=direct&dubbo=2.0.2&generic=true&interface=com.example.dubbo.demo.personal.PersonalService&loadbalance=gray&pid=8958&protocol=tri&queues=0&release=3.1.1&retries=2&sent=false&side=consumer&sticky=false&threadpool=shared&threads=2147483647&timeout=3000&timestamp=1690185626922&unloadClusterRelated=false, dubbo version: 3.1.1, current host: 192.168.5.53 2023-07-24 16:00:34 [shenyu-netty-nio-3] INFO org.apache.dubbo.registry.support.CacheableFailbackRegistry - [DUBBO] Evicting urls for service com.example.dubbo.demo.personal.PersonalService, size 1, dubbo version: 3.1.1, current host: 192.168.5.53 2023-07-24 16:00:37 [shenyu-shenyu-shared-8] ERROR org.apache.shenyu.web.handler.GlobalErrorHandler - handle error: [afd9aad0-10] Resolved [ShenyuException: org.apache.dubbo.rpc.StatusRpcException: DEADLINE_EXCEEDED : Waiting server-side response timeout by scan timer. start time: 2023-07-24 16:00:34.308, end time: 2023-07-24 16:00:37.339, timeout: 3000 ms, service: com.example.dubbo.demo.personal.PersonalService, method: $invoke RemoteAddress:192.168.5.53:50051] for HTTP POST /personal/getUser org.apache.shenyu.common.exception.ShenyuException: org.apache.dubbo.rpc.StatusRpcException: DEADLINE_EXCEEDED : Waiting server-side response timeout by scan timer. start time: 2023-07-24 16:00:34.308, end time: 2023-07-24 16:00:37.339, timeout: 3000 ms, service: com.example.dubbo.demo.personal.PersonalService, method: $invoke RemoteAddress:192.168.5.53:50051 at org.apache.shenyu.plugin.apache.dubbo.proxy.ApacheDubboProxyService.lambda$genericInvoker$1(ApacheDubboProxyService.java:91) Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: Error has been observed at the following site(s): *__checkpoint ⇢ org.apache.shenyu.web.configuration.ErrorHandlerConfiguration$1 [DefaultWebFilterChain] *__checkpoint ⇢ org.apache.shenyu.web.filter.FileSizeFilter [DefaultWebFilterChain] *__checkpoint ⇢ org.apache.shenyu.web.filter.CrossFilter [DefaultWebFilterChain] *__checkpoint ⇢ org.springframework.security.web.server.authorization.AuthorizationWebFilter [DefaultWebFilterChain] *__checkpoint ⇢ org.springframework.security.web.server.authorization.ExceptionTranslationWebFilter [DefaultWebFilterChain] *__checkpoint ⇢ org.springframework.security.web.server.authentication.logout.LogoutWebFilter [DefaultWebFilterChain] *__checkpoint ⇢ org.springframework.security.web.server.savedrequest.ServerRequestCacheWebFilter [DefaultWebFilterChain] *__checkpoint ⇢ org.springframework.security.web.server.context.SecurityContextServerWebExchangeWebFilter [DefaultWebFilterChain] *__checkpoint ⇢ org.springframework.security.web.server.context.ReactorContextWebFilter [DefaultWebFilterChain] *__checkpoint ⇢ org.springframework.security.web.server.header.HttpHeaderWriterWebFilter [DefaultWebFilterChain] *__checkpoint ⇢ org.springframework.security.config.web.server.ServerHttpSecurity$ServerWebExchangeReactorContextWebFilter [DefaultWebFilterChain] *__checkpoint ⇢ org.springframework.security.web.server.WebFilterChainProxy [DefaultWebFilterChain] *__checkpoint ⇢ org.springframework.boot.actuate.metrics.web.reactive.server.MetricsWebFilter [DefaultWebFilterChain] *__checkpoint ⇢ HTTP POST "/personal/getUser" [ExceptionHandlingWebHandler] Original Stack Trace: at org.apache.shenyu.plugin.apache.dubbo.proxy.ApacheDubboProxyService.lambda$genericInvoker$1(ApacheDubboProxyService.java:91) at reactor.core.publisher.Mono.lambda$onErrorMap$31(Mono.java:3733) at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:94) at reactor.core.publisher.MonoCompletionStage.lambda$subscribe$0(MonoCompletionStage.java:77) at java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:774) at java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:750) at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:488) at java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:1990) at org.apache.dubbo.rpc.protocol.dubbo.FutureAdapter.lambda$new$0(FutureAdapter.java:44) at java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:774) at java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:750) at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:488) at java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:1990) at org.apache.dubbo.rpc.protocol.tri.DeadlineFuture.doReceived(DeadlineFuture.java:133) at org.apache.dubbo.rpc.protocol.tri.DeadlineFuture.access$200(DeadlineFuture.java:40) at org.apache.dubbo.rpc.protocol.tri.DeadlineFuture$TimeoutCheckTask.notifyTimeout(DeadlineFuture.java:181) at org.apache.dubbo.rpc.protocol.tri.DeadlineFuture$TimeoutCheckTask.lambda$run$0(DeadlineFuture.java:168) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) Caused by: org.apache.dubbo.rpc.StatusRpcException: DEADLINE_EXCEEDED : Waiting server-side response timeout by scan timer. start time: 2023-07-24 16:00:34.308, end time: 2023-07-24 16:00:37.339, timeout: 3000 ms, service: com.example.dubbo.demo.personal.PersonalService, method: $invoke RemoteAddress:192.168.5.53:50051 at org.apache.dubbo.rpc.TriRpcStatus.asException(TriRpcStatus.java:214) at org.apache.dubbo.rpc.protocol.tri.DeadlineFuture.doReceived(DeadlineFuture.java:134) at org.apache.dubbo.rpc.protocol.tri.DeadlineFuture.access$200(DeadlineFuture.java:40) at org.apache.dubbo.rpc.protocol.tri.DeadlineFuture$TimeoutCheckTask.notifyTimeout(DeadlineFuture.java:181) at org.apache.dubbo.rpc.protocol.tri.DeadlineFuture$TimeoutCheckTask.lambda$run$0(DeadlineFuture.java:168) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748)

Anything else?

No response

james-ok avatar Jul 24 '23 08:07 james-ok

To be precise, when the Dubbo plugin makes generalization calls, if the parameters or return values of the service provider are protobuf type objects, it is not possible to serialize and deserialize JSON and protobuf objects

james-ok avatar Jul 25 '23 07:07 james-ok

Can you fix this ?

loongs-zhang avatar Jul 26 '23 03:07 loongs-zhang