-
Notifications
You must be signed in to change notification settings - Fork 26.6k
Description
Pre-check
- I am sure that all the content I provide is in English.
Search before asking
- I had searched in the issues and found no similar issues.
Apache Dubbo Component
Java SDK (apache/dubbo)
Dubbo Version
-
Dubbo Version: 3.3.0
-
APISIX Version: Unknown (tested with HTTP/1.1 enabled)
-
JDK Version: 1.8.0_452
-
Framework: Spring Boot 2.7.18
-
Protocol: Triple (tri)
Steps to reproduce this issue
step1: Deploy APISIX Gateway and configure service discovery via Nacos
Follow the official documentation to deploy APISIX and complete service discovery with Nacos: https://cn.dubbo.apache.org/zh-cn/blog/2024/04/22/%E4%BD%BF%E7%94%A8-apache-apisix-%E4%BB%A3%E7%90%86-dubbo-%E6%9C%8D%E5%8A%A1triple%E5%8D%8F%E8%AE%AE/
Key configurations:
- APISIX listens on 10.216.23.40:8090.
- Route rule: Proxy requests to /com.example.edu.initializer.samples.dubbo3.DemoService/* to the backend Dubbo Triple service (discovered via Nacos).
step2:
Verify APISIX proxy works via curl
Execute the following curl command and get a successful response:
curl http://10.216.23.40:8090/com.example.edu.initializer.samples.dubbo3.DemoService/sayHello -i
Curl response (successful):
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 12
Connection: keep-alive
alt-svc: h2=":24395"
Server: APISIX/3.2.2
"Hello null"
step3:Call via @DubboReference annotation and trigger exception
Consumer code with @DubboReference:
@DubboReference(
interfaceClass = DemoService.class,
protocol = "tri",
url = "tri://10.216.23.40:8090/com.example.edu.initializer.samples.dubbo3.DemoService/sayHello"
)
private DemoService demoService;
Trigger the call in consumer application:
String result = demoService.sayHello("test");
exception happened:
Caused by: org.apache.dubbo.rpc.RpcException: java.util.concurrent.ExecutionException: org.apache.dubbo.rpc.StatusRpcException: CANCELLED
at org.apache.dubbo.rpc.AsyncRpcResult.getAppResponse(AsyncRpcResult.java:181) ~[dubbo-3.3.0.jar:3.3.0]
at org.apache.dubbo.rpc.AsyncRpcResult.recreate(AsyncRpcResult.java:246) ~[dubbo-3.3.0.jar:3.3.0]
at org.apache.dubbo.rpc.proxy.InvocationUtil.invoke(InvocationUtil.java:64) ~[dubbo-3.3.0.jar:3.3.0]
at org.apache.dubbo.rpc.proxy.InvokerInvocationHandler.invoke(InvokerInvocationHandler.java:81) ~[dubbo-3.3.0.jar:3.3.0]
at com.iflytek.edu.initializer.samples.dubbo3.DemoServiceDubboProxy0.sayHello(DemoServiceDubboProxy0.java) ~[classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_452]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_452]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_452]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_452]
at org.apache.dubbo.config.spring.util.LazyTargetInvocationHandler.invoke(LazyTargetInvocationHandler.java:54) ~[dubbo-3.3.0.jar:3.3.0]
at com.iflytek.edu.initializer.samples.dubbo3.DemoServiceDubboProxy0.sayHello(DemoServiceDubboProxy0.java) ~[classes/:na]
at com.iflytek.edu.initializer.samples.dubbo3.consumer.base.ConsumerApplication.lambda$commandLineRunner$0(ConsumerApplication.java:34) [classes/:na]
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:765) [spring-boot-2.7.18.jar:2.7.18]
... 14 common frames omitted
Caused by: java.util.concurrent.ExecutionException: org.apache.dubbo.rpc.StatusRpcException: CANCELLED
at java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:357) ~[na:1.8.0_452]
at java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1908) ~[na:1.8.0_452]
at org.apache.dubbo.rpc.AsyncRpcResult.getAppResponse(AsyncRpcResult.java:172) ~[dubbo-3.3.0.jar:3.3.0]
... 26 common frames omitted
Caused by: org.apache.dubbo.rpc.StatusRpcException: CANCELLED
at org.apache.dubbo.rpc.TriRpcStatus.asException(TriRpcStatus.java:260) ~[dubbo-3.3.0.jar:3.3.0]
at org.apache.dubbo.rpc.protocol.tri.call.UnaryClientCallListener.onClose(UnaryClientCallListener.java:53) ~[dubbo-3.3.0.jar:3.3.0]
at org.apache.dubbo.rpc.protocol.tri.call.TripleClientCall.onComplete(TripleClientCall.java:126) ~[dubbo-3.3.0.jar:3.3.0]
at org.apache.dubbo.rpc.protocol.tri.call.TripleClientCall.onCancelByRemote(TripleClientCall.java:112) ~[dubbo-3.3.0.jar:3.3.0]
at org.apache.dubbo.rpc.protocol.tri.call.TripleClientCall.onClose(TripleClientCall.java:143) ~[dubbo-3.3.0.jar:3.3.0]
at org.apache.dubbo.common.threadpool.serial.SerializingExecutor.run(SerializingExecutor.java:105) ~[dubbo-3.3.0.jar:3.3.0]
at org.apache.dubbo.common.threadpool.ThreadlessExecutor$RunnableWrapper.run(ThreadlessExecutor.java:151) ~[dubbo-3.3.0.jar:3.3.0]
at org.apache.dubbo.common.threadpool.ThreadlessExecutor.waitAndDrain(ThreadlessExecutor.java:77) ~[dubbo-3.3.0.jar:3.3.0]
at org.apache.dubbo.rpc.AsyncRpcResult.get(AsyncRpcResult.java:220) ~[dubbo-3.3.0.jar:3.3.0]
at org.apache.dubbo.rpc.protocol.AbstractInvoker.waitForResultIfSync(AbstractInvoker.java:293) ~[dubbo-3.3.0.jar:3.3.0]
at org.apache.dubbo.rpc.protocol.AbstractInvoker.invoke(AbstractInvoker.java:195) ~[dubbo-3.3.0.jar:3.3.0]
at org.apache.dubbo.rpc.listener.ListenerInvokerWrapper.invoke(ListenerInvokerWrapper.java:71) ~[dubbo-3.3.0.jar:3.3.0]
at org.apache.dubbo.rpc.filter.RpcExceptionFilter.invoke(RpcExceptionFilter.java:40) ~[dubbo-3.3.0.jar:3.3.0]
at org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:349) ~[dubbo-3.3.0.jar:3.3.0]
at org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CallbackRegistrationInvoker.invoke(FilterChainBuilder.java:197) ~[dubbo-3.3.0.jar:3.3.0]
at org.apache.dubbo.rpc.protocol.ReferenceCountInvokerWrapper.invoke(ReferenceCountInvokerWrapper.java:106) ~[dubbo-3.3.0.jar:3.3.0]
at org.apache.dubbo.rpc.cluster.support.AbstractClusterInvoker.invokeWithContext(AbstractClusterInvoker.java:412) ~[dubbo-3.3.0.jar:3.3.0]
at org.apache.dubbo.rpc.cluster.support.FailoverClusterInvoker.doInvoke(FailoverClusterInvoker.java:82) ~[dubbo-3.3.0.jar:3.3.0]
at org.apache.dubbo.rpc.cluster.support.AbstractClusterInvoker.invoke(AbstractClusterInvoker.java:366) ~[dubbo-3.3.0.jar:3.3.0]
at org.apache.dubbo.rpc.cluster.router.RouterSnapshotFilter.invoke(RouterSnapshotFilter.java:46) ~[dubbo-3.3.0.jar:3.3.0]
at org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:349) ~[dubbo-3.3.0.jar:3.3.0]
at org.apache.dubbo.monitor.support.MonitorFilter.invoke(MonitorFilter.java:109) ~[dubbo-3.3.0.jar:3.3.0]
at org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:349) ~[dubbo-3.3.0.jar:3.3.0]
at org.apache.dubbo.rpc.cluster.filter.support.MetricsClusterFilter.invoke(MetricsClusterFilter.java:57) ~[dubbo-3.3.0.jar:3.3.0]
at org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:349) ~[dubbo-3.3.0.jar:3.3.0]
at org.apache.dubbo.rpc.protocol.dubbo.filter.FutureFilter.invoke(FutureFilter.java:53) ~[dubbo-3.3.0.jar:3.3.0]
at org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:349) ~[dubbo-3.3.0.jar:3.3.0]
at org.apache.dubbo.spring.security.filter.ContextHolderParametersSelectedTransferFilter.invoke(ContextHolderParametersSelectedTransferFilter.java:40) ~[dubbo-3.3.0.jar:3.3.0]
at org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:349) ~[dubbo-3.3.0.jar:3.3.0]
at org.apache.dubbo.metrics.filter.MetricsFilter.invoke(MetricsFilter.java:86) ~[dubbo-3.3.0.jar:3.3.0]
at org.apache.dubbo.rpc.cluster.filter.support.MetricsConsumerFilter.invoke(MetricsConsumerFilter.java:38) ~[dubbo-3.3.0.jar:3.3.0]
at org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:349) ~[dubbo-3.3.0.jar:3.3.0]
at org.apache.dubbo.rpc.cluster.filter.support.ConsumerClassLoaderFilter.invoke(ConsumerClassLoaderFilter.java:40) ~[dubbo-3.3.0.jar:3.3.0]
at org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:349) ~[dubbo-3.3.0.jar:3.3.0]
at org.apache.dubbo.rpc.cluster.filter.support.ConsumerContextFilter.invoke(ConsumerContextFilter.java:119) ~[dubbo-3.3.0.jar:3.3.0]
at org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:349) ~[dubbo-3.3.0.jar:3.3.0]
at org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CallbackRegistrationInvoker.invoke(FilterChainBuilder.java:197) ~[dubbo-3.3.0.jar:3.3.0]
at org.apache.dubbo.rpc.cluster.support.wrapper.AbstractCluster$ClusterFilterInvoker.invoke(AbstractCluster.java:101) ~[dubbo-3.3.0.jar:3.3.0]
at org.apache.dubbo.rpc.cluster.support.wrapper.MockClusterInvoker.invoke(MockClusterInvoker.java:107) ~[dubbo-3.3.0.jar:3.3.0]
at org.apache.dubbo.rpc.cluster.support.wrapper.ScopeClusterInvoker.invoke(ScopeClusterInvoker.java:156) ~[dubbo-3.3.0.jar:3.3.0]
... 25 common frames omitted
apisix acesslog:
172.16.12.131 - - [05/Jan/2026:23:18:37 +0800] - "PRI * HTTP/2.0" 400 229 0.270 "-" "-" - - - "://"
What you expected to happen
The @DubboReference annotation should correctly send Triple protocol requests (adapted to HTTP/1.1 via configuration) to the APISIX gateway, and successfully receive the response from the backend service.
Anything else
No response
Are you willing to submit a pull request to fix on your own?
- Yes I am willing to submit a pull request on my own!
Code of Conduct
- I agree to follow this project's Code of Conduct
Metadata
Metadata
Assignees
Labels
Type
Projects
Status