You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by al...@apache.org on 2024/09/05 01:40:22 UTC

(dubbo) branch 3.3 updated: Move executor initialization after route for rest (#14568)

This is an automated email from the ASF dual-hosted git repository.

albumenj pushed a commit to branch 3.3
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.3 by this push:
     new 9e3a72cf84 Move executor initialization after route for rest (#14568)
9e3a72cf84 is described below

commit 9e3a72cf84553fd5c95d8c3bbefe26a14cb7e226
Author: Sean Yang <ox...@gmail.com>
AuthorDate: Thu Sep 5 09:40:17 2024 +0800

    Move executor initialization after route for rest (#14568)
---
 .../executor/AbstractIsolationExecutorSupport.java | 10 +--
 .../tri/h12/AbstractServerTransportListener.java   | 82 +++++++++++++---------
 .../h12/grpc/GrpcHttp2ServerTransportListener.java | 54 ++++++++------
 .../DefaultHttp11ServerTransportListener.java      | 11 ---
 .../http2/GenericHttp2ServerTransportListener.java | 10 ---
 .../mapping/DefaultRequestMappingRegistry.java     |  2 +-
 .../transport/TripleIsolationExecutorSupport.java  | 28 ++++----
 .../tri/test/TestServerTransportListener.java      |  2 +-
 8 files changed, 100 insertions(+), 99 deletions(-)

diff --git a/dubbo-common/src/main/java/org/apache/dubbo/rpc/executor/AbstractIsolationExecutorSupport.java b/dubbo-common/src/main/java/org/apache/dubbo/rpc/executor/AbstractIsolationExecutorSupport.java
index b188e14775..d740bd59b4 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/rpc/executor/AbstractIsolationExecutorSupport.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/rpc/executor/AbstractIsolationExecutorSupport.java
@@ -16,7 +16,6 @@
  */
 package org.apache.dubbo.rpc.executor;
 
-import org.apache.dubbo.common.ServiceKey;
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.threadpool.manager.ExecutorRepository;
 import org.apache.dubbo.rpc.model.FrameworkServiceRepository;
@@ -57,15 +56,12 @@ public abstract class AbstractIsolationExecutorSupport implements ExecutorSuppor
         return executorRepository.getExecutor(providerModel, serviceUrls.get(0));
     }
 
-    protected ServiceKey getServiceKey(Object data) {
+    protected String getServiceKey(Object data) {
         return null;
     }
 
     protected ProviderModel getProviderModel(Object data) {
-        ServiceKey serviceKey = getServiceKey(data);
-        if (serviceKey == null) {
-            return null;
-        }
-        return frameworkServiceRepository.lookupExportedService(serviceKey.toString());
+        String serviceKey = getServiceKey(data);
+        return serviceKey == null ? null : frameworkServiceRepository.lookupExportedService(serviceKey);
     }
 }
diff --git a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/h12/AbstractServerTransportListener.java b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/h12/AbstractServerTransportListener.java
index 0cbbdba3e5..a6f6b47917 100644
--- a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/h12/AbstractServerTransportListener.java
+++ b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/h12/AbstractServerTransportListener.java
@@ -21,6 +21,7 @@ import org.apache.dubbo.common.constants.CommonConstants;
 import org.apache.dubbo.common.constants.LoggerCodeConstants;
 import org.apache.dubbo.common.logger.FluentLogger;
 import org.apache.dubbo.common.threadpool.manager.ExecutorRepository;
+import org.apache.dubbo.common.threadpool.serial.SerializingExecutor;
 import org.apache.dubbo.common.utils.MethodUtils;
 import org.apache.dubbo.remoting.http12.HttpChannel;
 import org.apache.dubbo.remoting.http12.HttpInputMessage;
@@ -32,7 +33,6 @@ import org.apache.dubbo.remoting.http12.message.MethodMetadata;
 import org.apache.dubbo.rpc.HeaderFilter;
 import org.apache.dubbo.rpc.Invoker;
 import org.apache.dubbo.rpc.RpcInvocation;
-import org.apache.dubbo.rpc.executor.ExecutorSupport;
 import org.apache.dubbo.rpc.model.FrameworkModel;
 import org.apache.dubbo.rpc.model.MethodDescriptor;
 import org.apache.dubbo.rpc.protocol.tri.DescriptorUtils;
@@ -79,56 +79,65 @@ public abstract class AbstractServerTransportListener<HEADER extends RequestMeta
                 .getActivateExtension(url, CommonConstants.HEADER_FILTER_KEY);
     }
 
-    protected static ExecutorSupport getExecutorSupport(URL url) {
-        return ExecutorRepository.getInstance(url.getOrDefaultApplicationModel())
-                .getExecutorSupport(url);
-    }
-
     @Override
-    public void onMetadata(HEADER metadata) {
+    public final void onMetadata(HEADER metadata) {
+        httpMetadata = metadata;
+        exceptionCustomizerWrapper.setMetadata(metadata);
+
+        try {
+            onBeforeMetadata(metadata);
+        } catch (Throwable t) {
+            logError(t);
+            onMetadataError(metadata, t);
+            return;
+        }
+
         try {
-            executor = initializeExecutor(metadata);
-        } catch (Throwable throwable) {
-            LOGGER.error(LoggerCodeConstants.COMMON_ERROR_USE_THREAD_POOL, "Initialize executor fail.", throwable);
-            onError(throwable);
+            executor = initializeExecutor(url, metadata);
+        } catch (Throwable t) {
+            LOGGER.error(LoggerCodeConstants.COMMON_ERROR_USE_THREAD_POOL, "Initialize executor failed.", t);
+            onError(t);
             return;
         }
         if (executor == null) {
-            LOGGER.internalError("Executor must be not null.");
-            onError(new NullPointerException("initializeExecutor return null"));
+            LOGGER.internalError("Executor must not be null.");
+            onError(new NullPointerException("Initialize executor return null"));
             return;
         }
+
         executor.execute(() -> {
             try {
-                doOnMetadata(metadata);
+                onPrepareMetadata(metadata);
+                setHttpMessageListener(buildHttpMessageListener());
+                onMetadataCompletion(metadata);
             } catch (Throwable t) {
                 logError(t);
                 onMetadataError(metadata, t);
-                onError(t);
             }
         });
     }
 
-    /**
-     * default direct executor
-     */
-    protected Executor initializeExecutor(HEADER metadata) {
-        return Runnable::run;
+    protected void onBeforeMetadata(HEADER metadata) {
+        doRoute(metadata);
     }
 
-    protected void doOnMetadata(HEADER metadata) {
-        onPrepareMetadata(metadata);
-        httpMetadata = metadata;
-        exceptionCustomizerWrapper.setMetadata(metadata);
-
+    protected final void doRoute(HEADER metadata) {
         context = requestRouter.route(url, metadata, httpChannel);
         if (context == null) {
             throw new HttpStatusException(HttpStatus.NOT_FOUND.getCode(), "Invoker not found");
         }
-
         exceptionCustomizerWrapper.setMethodDescriptor(context.getMethodDescriptor());
-        setHttpMessageListener(buildHttpMessageListener());
-        onMetadataCompletion(metadata);
+    }
+
+    protected Executor initializeExecutor(URL url, HEADER metadata) {
+        url = context.getInvoker().getUrl();
+        return getExecutor(url, url);
+    }
+
+    protected final Executor getExecutor(URL url, Object data) {
+        return new SerializingExecutor(ExecutorRepository.getInstance(url.getOrDefaultApplicationModel())
+                .getExecutorSupport(url)
+                .getExecutor(data));
     }
 
     protected void onPrepareMetadata(HEADER metadata) {
@@ -143,6 +152,7 @@ public abstract class AbstractServerTransportListener<HEADER extends RequestMeta
 
     protected void onMetadataError(HEADER metadata, Throwable throwable) {
         initializeAltSvc(url);
+        onError(throwable);
     }
 
     /**
@@ -151,7 +161,7 @@ public abstract class AbstractServerTransportListener<HEADER extends RequestMeta
     protected void initializeAltSvc(URL url) {}
 
     @Override
-    public void onData(MESSAGE message) {
+    public final void onData(MESSAGE message) {
         if (executor == null) {
             try {
                 Throwable t = new NullPointerException("Executor not initialized");
@@ -160,6 +170,7 @@ public abstract class AbstractServerTransportListener<HEADER extends RequestMeta
             } finally {
                 onDataFinally(message);
             }
+            return;
         }
         executor.execute(() -> {
             try {
@@ -178,7 +189,6 @@ public abstract class AbstractServerTransportListener<HEADER extends RequestMeta
             return;
         }
         onPrepareData(message);
-        // decode message
         httpMessageListener.onMessage(message.getBody());
         onDataCompletion(message);
     }
@@ -208,11 +218,12 @@ public abstract class AbstractServerTransportListener<HEADER extends RequestMeta
     }
 
     private void logError(Throwable t) {
-        t = ExceptionUtils.unwrap(t);
         Supplier<String> msg = () -> {
-            StringBuilder sb = new StringBuilder(64);
-            sb.append("An error occurred while processing the http request, ");
-            sb.append(httpMetadata);
+            StringBuilder sb = new StringBuilder(128);
+            sb.append("An error occurred while processing the http request with ")
+                    .append(getClass().getSimpleName())
+                    .append(", ")
+                    .append(httpMetadata);
             if (TripleProtocol.VERBOSE_ENABLED) {
                 sb.append(", headers=").append(httpMetadata.headers());
             }
@@ -238,7 +249,8 @@ public abstract class AbstractServerTransportListener<HEADER extends RequestMeta
             }
             return sb.toString();
         };
-        LOGGER.msg(msg).log(exceptionCustomizerWrapper.resolveLogLevel(t), t);
+        Throwable th = ExceptionUtils.unwrap(t);
+        LOGGER.msg(msg).log(exceptionCustomizerWrapper.resolveLogLevel(th), th);
     }
 
     protected final RpcInvocation buildRpcInvocation(RpcInvocationBuildContext context) {
diff --git a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/h12/grpc/GrpcHttp2ServerTransportListener.java b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/h12/grpc/GrpcHttp2ServerTransportListener.java
index 51aa756efe..8f6c3350d3 100644
--- a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/h12/grpc/GrpcHttp2ServerTransportListener.java
+++ b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/h12/grpc/GrpcHttp2ServerTransportListener.java
@@ -41,6 +41,7 @@ import org.apache.dubbo.rpc.protocol.tri.h12.http2.GenericHttp2ServerTransportLi
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.concurrent.Executor;
 import java.util.function.Function;
 
 import static org.apache.dubbo.common.constants.LoggerCodeConstants.PROTOCOL_FAILED_PARSE;
@@ -55,6 +56,37 @@ public class GrpcHttp2ServerTransportListener extends GenericHttp2ServerTranspor
         super(h2StreamChannel, url, frameworkModel);
     }
 
+    @Override
+    protected void onBeforeMetadata(Http2Header metadata) {}
+
+    @Override
+    protected Executor initializeExecutor(URL url, Http2Header metadata) {
+        return getExecutor(url, metadata);
+    }
+
+    @Override
+    protected void onPrepareMetadata(Http2Header metadata) {
+        doRoute(metadata);
+    }
+
+    @Override
+    protected void onMetadataCompletion(Http2Header metadata) {
+        processGrpcHeaders(metadata);
+        super.onMetadataCompletion(metadata);
+    }
+
+    private void processGrpcHeaders(Http2Header metadata) {
+        String messageEncoding = metadata.header(GrpcHeaderNames.GRPC_ENCODING.getName());
+        if (messageEncoding != null && !Identity.MESSAGE_ENCODING.equals(messageEncoding)) {
+            DeCompressor compressor = DeCompressor.getCompressor(getFrameworkModel(), messageEncoding);
+            if (compressor == null) {
+                throw new UnimplementedException(
+                        GrpcHeaderNames.GRPC_ENCODING.getName() + " '" + messageEncoding + "'");
+            }
+            ((GrpcStreamingDecoder) getStreamingDecoder()).setDeCompressor(compressor);
+        }
+    }
+
     @Override
     protected StreamingDecoder newStreamingDecoder() {
         return new GrpcStreamingDecoder();
@@ -100,24 +132,6 @@ public class GrpcHttp2ServerTransportListener extends GenericHttp2ServerTranspor
                 methodMetadata.getActualResponseType());
     }
 
-    @Override
-    protected void onMetadataCompletion(Http2Header metadata) {
-        processGrpcHeaders(metadata);
-        super.onMetadataCompletion(metadata);
-    }
-
-    private void processGrpcHeaders(Http2Header metadata) {
-        String messageEncoding = metadata.header(GrpcHeaderNames.GRPC_ENCODING.getName());
-        if (messageEncoding != null && !Identity.MESSAGE_ENCODING.equals(messageEncoding)) {
-            DeCompressor compressor = DeCompressor.getCompressor(getFrameworkModel(), messageEncoding);
-            if (compressor == null) {
-                throw new UnimplementedException(
-                        GrpcHeaderNames.GRPC_ENCODING.getName() + " '" + messageEncoding + "'");
-            }
-            ((GrpcStreamingDecoder) getStreamingDecoder()).setDeCompressor(compressor);
-        }
-    }
-
     @Override
     protected RpcInvocation onBuildRpcInvocationCompletion(RpcInvocation invocation) {
         String timeoutString = getHttpMetadata().header(GrpcHeaderNames.GRPC_TIMEOUT.getName());
@@ -147,9 +161,7 @@ public class GrpcHttp2ServerTransportListener extends GenericHttp2ServerTranspor
 
     @Override
     protected void setMethodDescriptor(MethodDescriptor methodDescriptor) {
-        GrpcCompositeCodec grpcCompositeCodec =
-                (GrpcCompositeCodec) getContext().getHttpMessageDecoder();
-        grpcCompositeCodec.loadPackableMethod(methodDescriptor);
+        ((GrpcCompositeCodec) getContext().getHttpMessageDecoder()).loadPackableMethod(methodDescriptor);
         super.setMethodDescriptor(methodDescriptor);
     }
 
diff --git a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/h12/http1/DefaultHttp11ServerTransportListener.java b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/h12/http1/DefaultHttp11ServerTransportListener.java
index ba020481de..e59cb07421 100644
--- a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/h12/http1/DefaultHttp11ServerTransportListener.java
+++ b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/h12/http1/DefaultHttp11ServerTransportListener.java
@@ -18,7 +18,6 @@ package org.apache.dubbo.rpc.protocol.tri.h12.http1;
 
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.stream.StreamObserver;
-import org.apache.dubbo.common.threadpool.serial.SerializingExecutor;
 import org.apache.dubbo.remoting.Constants;
 import org.apache.dubbo.remoting.http12.HttpChannel;
 import org.apache.dubbo.remoting.http12.HttpHeaderNames;
@@ -32,7 +31,6 @@ import org.apache.dubbo.remoting.http12.message.MediaType;
 import org.apache.dubbo.remoting.http12.message.codec.JsonCodec;
 import org.apache.dubbo.rpc.Invoker;
 import org.apache.dubbo.rpc.RpcInvocation;
-import org.apache.dubbo.rpc.executor.ExecutorSupport;
 import org.apache.dubbo.rpc.model.FrameworkModel;
 import org.apache.dubbo.rpc.model.MethodDescriptor;
 import org.apache.dubbo.rpc.protocol.tri.Http3Exchanger;
@@ -44,19 +42,15 @@ import org.apache.dubbo.rpc.protocol.tri.h12.ServerCallListener;
 import org.apache.dubbo.rpc.protocol.tri.h12.ServerStreamServerCallListener;
 import org.apache.dubbo.rpc.protocol.tri.h12.UnaryServerCallListener;
 
-import java.util.concurrent.Executor;
-
 public class DefaultHttp11ServerTransportListener
         extends AbstractServerTransportListener<RequestMetadata, HttpInputMessage>
         implements Http1ServerTransportListener {
 
-    private final ExecutorSupport executorSupport;
     private final HttpChannel httpChannel;
     private Http1ServerChannelObserver responseObserver;
 
     public DefaultHttp11ServerTransportListener(HttpChannel httpChannel, URL url, FrameworkModel frameworkModel) {
         super(frameworkModel, url, httpChannel);
-        executorSupport = getExecutorSupport(url);
         this.httpChannel = httpChannel;
         responseObserver = prepareResponseObserver(new Http1UnaryServerChannelObserver(httpChannel));
     }
@@ -68,11 +62,6 @@ public class DefaultHttp11ServerTransportListener
         return responseObserver;
     }
 
-    @Override
-    protected Executor initializeExecutor(RequestMetadata metadata) {
-        return new SerializingExecutor(executorSupport.getExecutor(metadata));
-    }
-
     @Override
     protected HttpMessageListener buildHttpMessageListener() {
         RpcInvocationBuildContext context = getContext();
diff --git a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/h12/http2/GenericHttp2ServerTransportListener.java b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/h12/http2/GenericHttp2ServerTransportListener.java
index 09ba3fc449..9f395c5507 100644
--- a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/h12/http2/GenericHttp2ServerTransportListener.java
+++ b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/h12/http2/GenericHttp2ServerTransportListener.java
@@ -17,7 +17,6 @@
 package org.apache.dubbo.rpc.protocol.tri.h12.http2;
 
 import org.apache.dubbo.common.URL;
-import org.apache.dubbo.common.threadpool.serial.SerializingExecutor;
 import org.apache.dubbo.remoting.Constants;
 import org.apache.dubbo.remoting.http12.HttpHeaderNames;
 import org.apache.dubbo.remoting.http12.h2.CancelStreamException;
@@ -34,7 +33,6 @@ import org.apache.dubbo.remoting.http12.message.codec.JsonCodec;
 import org.apache.dubbo.rpc.Invoker;
 import org.apache.dubbo.rpc.RpcContext;
 import org.apache.dubbo.rpc.RpcInvocation;
-import org.apache.dubbo.rpc.executor.ExecutorSupport;
 import org.apache.dubbo.rpc.model.FrameworkModel;
 import org.apache.dubbo.rpc.model.MethodDescriptor;
 import org.apache.dubbo.rpc.protocol.tri.Http3Exchanger;
@@ -47,13 +45,11 @@ import org.apache.dubbo.rpc.protocol.tri.h12.ServerStreamServerCallListener;
 import org.apache.dubbo.rpc.protocol.tri.h12.UnaryServerCallListener;
 
 import java.io.InputStream;
-import java.util.concurrent.Executor;
 
 public class GenericHttp2ServerTransportListener extends AbstractServerTransportListener<Http2Header, Http2InputMessage>
         implements Http2TransportListener {
 
     private final H2StreamChannel h2StreamChannel;
-    private final ExecutorSupport executorSupport;
     private final StreamingDecoder streamingDecoder;
     private Http2ServerChannelObserver responseObserver;
     private ServerCallListener serverCallListener;
@@ -62,7 +58,6 @@ public class GenericHttp2ServerTransportListener extends AbstractServerTransport
             H2StreamChannel h2StreamChannel, URL url, FrameworkModel frameworkModel) {
         super(frameworkModel, url, h2StreamChannel);
         this.h2StreamChannel = h2StreamChannel;
-        executorSupport = getExecutorSupport(url);
         streamingDecoder = newStreamingDecoder();
         responseObserver = prepareResponseObserver(newResponseObserver(h2StreamChannel));
     }
@@ -88,11 +83,6 @@ public class GenericHttp2ServerTransportListener extends AbstractServerTransport
         return responseObserver;
     }
 
-    @Override
-    protected Executor initializeExecutor(Http2Header metadata) {
-        return new SerializingExecutor(executorSupport.getExecutor(metadata));
-    }
-
     @Override
     protected HttpMessageListener buildHttpMessageListener() {
         RpcInvocationBuildContext context = getContext();
diff --git a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/rest/mapping/DefaultRequestMappingRegistry.java b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/rest/mapping/DefaultRequestMappingRegistry.java
index 1e7742aa6e..f219b85403 100644
--- a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/rest/mapping/DefaultRequestMappingRegistry.java
+++ b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/rest/mapping/DefaultRequestMappingRegistry.java
@@ -143,7 +143,7 @@ public final class DefaultRequestMappingRegistry implements RequestMappingRegist
             }
         });
         LOGGER.info(
-                "Registered {} REST mappings for service [{}] at url [{}] in {}ms",
+                "Registered {} rest mappings for service [{}] at url [{}] in {}ms",
                 counter,
                 ClassUtils.toShortString(service),
                 url.toString(""),
diff --git a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/transport/TripleIsolationExecutorSupport.java b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/transport/TripleIsolationExecutorSupport.java
index 9bbdca7376..fcfea556f9 100644
--- a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/transport/TripleIsolationExecutorSupport.java
+++ b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/transport/TripleIsolationExecutorSupport.java
@@ -16,7 +16,6 @@
  */
 package org.apache.dubbo.rpc.protocol.tri.transport;
 
-import org.apache.dubbo.common.ServiceKey;
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.logger.ErrorTypeAwareLogger;
 import org.apache.dubbo.common.logger.LoggerFactory;
@@ -37,22 +36,25 @@ public class TripleIsolationExecutorSupport extends AbstractIsolationExecutorSup
     }
 
     @Override
-    protected ServiceKey getServiceKey(Object data) {
-        if (!(data instanceof RequestMetadata)) {
-            return null;
+    protected String getServiceKey(Object data) {
+        if (data instanceof RequestMetadata) {
+            RequestMetadata httpMetadata = (RequestMetadata) data;
+            RequestPath path = RequestPath.parse(httpMetadata.path());
+            if (path == null) {
+                return null;
+            }
+            HttpHeaders headers = httpMetadata.headers();
+            return URL.buildKey(
+                    path.getServiceInterface(),
+                    getHeader(headers, TripleHeaderEnum.SERVICE_GROUP, RestConstants.HEADER_SERVICE_GROUP),
+                    getHeader(headers, TripleHeaderEnum.SERVICE_VERSION, RestConstants.HEADER_SERVICE_VERSION));
         }
 
-        RequestMetadata httpMetadata = (RequestMetadata) data;
-        RequestPath path = RequestPath.parse(httpMetadata.path());
-        if (path == null) {
-            return null;
+        if (data instanceof URL) {
+            return ((URL) data).getServiceKey();
         }
 
-        HttpHeaders headers = httpMetadata.headers();
-        return new ServiceKey(
-                path.getServiceInterface(),
-                getHeader(headers, TripleHeaderEnum.SERVICE_VERSION, RestConstants.HEADER_SERVICE_VERSION),
-                getHeader(headers, TripleHeaderEnum.SERVICE_GROUP, RestConstants.HEADER_SERVICE_GROUP));
+        return null;
     }
 
     private static String getHeader(HttpHeaders headers, TripleHeaderEnum en, String key) {
diff --git a/dubbo-rpc/dubbo-rpc-triple/src/test/java/org/apache/dubbo/rpc/protocol/tri/test/TestServerTransportListener.java b/dubbo-rpc/dubbo-rpc-triple/src/test/java/org/apache/dubbo/rpc/protocol/tri/test/TestServerTransportListener.java
index 7e06101647..255be42d67 100644
--- a/dubbo-rpc/dubbo-rpc-triple/src/test/java/org/apache/dubbo/rpc/protocol/tri/test/TestServerTransportListener.java
+++ b/dubbo-rpc/dubbo-rpc-triple/src/test/java/org/apache/dubbo/rpc/protocol/tri/test/TestServerTransportListener.java
@@ -31,7 +31,7 @@ public class TestServerTransportListener extends GenericHttp2ServerTransportList
     }
 
     @Override
-    protected Executor initializeExecutor(Http2Header metadata) {
+    protected Executor initializeExecutor(URL url, Http2Header metadata) {
         return Runnable::run;
     }
 }