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

liuhongyu pushed a commit to branch feat/refactor
in repository https://gitbox.apache.org/repos/asf/shenyu.git

commit 8e82cd5866daaf939ed96530f6515ce1fe594e5a
Author: liuhy <[email protected]>
AuthorDate: Sun Jan 4 09:45:03 2026 +0800

    refactor: optimize gateway dependencies and performance
    
    - Remove unused plugins and dependencies in shenyu-bootstrap to reduce 
artifact size
    - Configure spring-boot-maven-plugin to ensure executable jar generation
    - Optimize logging in ShenyuPlugin and ShenyuWebHandler to reduce overhead
    - Update application.yml to use HTTP register type and WebSocket sync
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
---
 shenyu-bootstrap/pom.xml                           | 270 +++------------------
 .../src/main/resources/application.yml             |   8 +-
 .../org/apache/shenyu/plugin/api/ShenyuPlugin.java |  16 +-
 .../shenyu/web/handler/ShenyuWebHandler.java       |  19 +-
 4 files changed, 63 insertions(+), 250 deletions(-)

diff --git a/shenyu-bootstrap/pom.xml b/shenyu-bootstrap/pom.xml
index abe6c1598f..ce68b29cbc 100644
--- a/shenyu-bootstrap/pom.xml
+++ b/shenyu-bootstrap/pom.xml
@@ -217,20 +217,6 @@
         </dependency>
         <!--shenyu grpc plugin end-->
 
-        <!--shenyu tars plugin start-->
-        <dependency>
-            <groupId>org.apache.shenyu</groupId>
-            <artifactId>shenyu-spring-boot-starter-plugin-tars</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>com.tencent.tars</groupId>
-            <artifactId>tars-client</artifactId>
-            <version>1.7.2</version>
-        </dependency>
-        <!--shenyu tars plugin end-->
-
         <!--Tcp Plugin Start-->
         <dependency>
             <groupId>org.apache.shenyu</groupId>
@@ -239,231 +225,14 @@
         </dependency>
         <!--Tcp Plugin end-->
 
-        <!--Ai proxy Plugin Start-->
-        <dependency>
-            <groupId>org.apache.shenyu</groupId>
-            <artifactId>shenyu-spring-boot-starter-plugin-ai-proxy</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <!--Ai proxy Plugin end-->
-        
-        <!--Ai prompt Plugin Start-->
-        <dependency>
-            <groupId>org.apache.shenyu</groupId>
-            
<artifactId>shenyu-spring-boot-starter-plugin-ai-prompt</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <!--Ai prompt Plugin end-->
-
-        <!--Ai token limiter Plugin Start-->
-        <dependency>
-            <groupId>org.apache.shenyu</groupId>
-            
<artifactId>shenyu-spring-boot-starter-plugin-ai-token-limiter</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <!--Ai token limiter Plugin end-->
-
-        <!--Ai request transformer Plugin Start-->
-        <dependency>
-            <groupId>org.apache.shenyu</groupId>
-            
<artifactId>shenyu-spring-boot-starter-plugin-ai-request-transformer</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <!--Ai request transformer Plugin end-->
-
-        <!--Ai response transformer Plugin Start-->
-        <dependency>
-            <groupId>org.apache.shenyu</groupId>
-            
<artifactId>shenyu-spring-boot-starter-plugin-ai-response-transformer</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <!--Ai response transformer Plugin end-->
-
-        <!--Mcp Server Plugin Start-->
-        <dependency>
-            <groupId>org.apache.shenyu</groupId>
-            
<artifactId>shenyu-spring-boot-starter-plugin-mcp-server</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <!--Mcp Server Plugin end-->
-
-        <!--shenyu sofa plugin start-->
-        <dependency>
-            <groupId>com.alipay.sofa</groupId>
-            <artifactId>sofa-rpc-all</artifactId>
-            <exclusions>
-                <exclusion>
-                    <groupId>net.jcip</groupId>
-                    <artifactId>jcip-annotations</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>io.grpc</groupId>
-                    <artifactId>grpc-core</artifactId>
-                </exclusion>
-                <exclusion>
-                    <artifactId>commons-io</artifactId>
-                    <groupId>commons-io</groupId>
-                </exclusion>
-                <exclusion>
-                    <artifactId>okio</artifactId>
-                    <groupId>com.squareup.okio</groupId>
-                </exclusion>
-                <exclusion>
-                    <artifactId>sofa-common-tools</artifactId>
-                    <groupId>com.alipay.sofa.common</groupId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>com.alipay.sofa.common</groupId>
-            <artifactId>sofa-common-tools</artifactId>
-            <version>${sofa-common-tools.version}</version>
-            <exclusions>
-                <exclusion>
-                    <artifactId>guava</artifactId>
-                    <groupId>com.google.guava</groupId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.shenyu</groupId>
-            <artifactId>shenyu-spring-boot-starter-plugin-sofa</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <!--shenyu sofa plugin end-->
-
-        <dependency>
-            <groupId>com.alibaba.cloud</groupId>
-            
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
-            <version>${nacos-discovery.version}</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.springframework.cloud</groupId>
-                    <artifactId>spring-cloud-loadbalancer</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-
-<!--        <dependency>-->
-<!--            <groupId>org.springframework.cloud</groupId>-->
-<!--            
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>-->
-<!--            <version>${eureka-client.version}</version>-->
-<!--            <exclusions>-->
-<!--                <exclusion>-->
-<!--                    <groupId>org.springframework.cloud</groupId>-->
-<!--                    
<artifactId>spring-cloud-starter-loadbalancer</artifactId>-->
-<!--                </exclusion>-->
-<!--            </exclusions>-->
-<!--        </dependency>-->
-
-        <dependency>
-            <groupId>org.springframework.cloud</groupId>
-            <artifactId>spring-cloud-commons</artifactId>
-            <version>${spring-cloud-commons.version}</version>
-        </dependency>
-        <!--shenyu springCloud plugin end-->
-
-        <!--shenyu key-auth plugin start-->
-        <dependency>
-            <groupId>org.apache.shenyu</groupId>
-            <artifactId>shenyu-spring-boot-starter-plugin-key-auth</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <!--shenyu key-auth plugin end -->
-
-        <!--shenyu mock plugin start-->
-        <dependency>
-            <groupId>org.apache.shenyu</groupId>
-            <artifactId>shenyu-spring-boot-starter-plugin-mock</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <!--shenyu mock plugin end-->
-
-        <!--shenyu  apache dubbo plugin start-->
-        <dependency>
-            <groupId>org.apache.shenyu</groupId>
-            
<artifactId>shenyu-spring-boot-starter-plugin-apache-dubbo</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.dubbo</groupId>
-            <artifactId>dubbo</artifactId>
-            <version>${apache.dubbo.version}</version>
-        </dependency>
-        <!-- Dubbo Nacos registry dependency -->
-        <!--  <dependency>
-              <groupId>org.apache.dubbo</groupId>
-              <artifactId>dubbo-registry-nacos</artifactId>
-              <version>2.7.15</version>
-          </dependency>
-          <dependency>
-              <groupId>com.alibaba.nacos</groupId>
-              <artifactId>nacos-client</artifactId>
-              <version>2.0.4</version>
-          </dependency>-->
-        <!-- Dubbo zookeeper registry dependency start -->
-        <dependency>
-            <groupId>org.apache.dubbo</groupId>
-            <artifactId>dubbo-dependencies-zookeeper</artifactId>
-            <version>${apache.dubbo.version}</version>
-            <exclusions>
-                <exclusion>
-                    <artifactId>slf4j-log4j12</artifactId>
-                    <groupId>org.slf4j</groupId>
-                </exclusion>
-            </exclusions>
-            <type>pom</type>
-        </dependency>
-        <!-- Dubbo zookeeper registry dependency end -->
-        <!-- shenyu  apache dubbo plugin end-->
-
-        <!--shenyu motan plugin start-->
-        <!--If you plan to use the motan plugin and want to use the hessian 
serialization,
-        please check the sofa plugin related dependencies.In particular, the 
reliance on sofa-hessian should be excluded.
-        Because sofa-hessian and caucho-hessian can cause class loading 
conflicts and cause some unexpected problems-->
-        <dependency>
-            <groupId>com.weibo</groupId>
-            <artifactId>motan-core</artifactId>
-            <version>${motan.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>com.weibo</groupId>
-            <artifactId>motan-transport-netty4</artifactId>
-            <version>${motan.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>com.weibo</groupId>
-            <artifactId>motan-registry-zookeeper</artifactId>
-            <version>${motan.version}</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>log4j</groupId>
-                    <artifactId>log4j</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>org.slf4j</groupId>
-                    <artifactId>slf4j-log4j12</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>com.weibo</groupId>
-            <artifactId>motan-springsupport</artifactId>
-            <version>${motan.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.shenyu</groupId>
-            <artifactId>shenyu-spring-boot-starter-plugin-motan</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <!--shenyu motan plugin end-->
-
         <!--shenyu data sync start use zookeeper-->
+        <!--
         <dependency>
             <groupId>org.apache.shenyu</groupId>
             
<artifactId>shenyu-spring-boot-starter-sync-data-zookeeper</artifactId>
             <version>${project.version}</version>
         </dependency>
+        -->
 
         <!--shenyu data sync start use websocket-->
         <dependency>
@@ -480,13 +249,17 @@
         </dependency>
 
         <!--shenyu data sync start use nacos-->
+        <!--
         <dependency>
             <groupId>org.apache.shenyu</groupId>
             <artifactId>shenyu-spring-boot-starter-sync-data-nacos</artifactId>
             <version>${project.version}</version>
         </dependency>
+        -->
+
 
         <!--shenyu data sync start use etcd-->
+        <!--
         <dependency>
             <groupId>org.apache.shenyu</groupId>
             <artifactId>shenyu-spring-boot-starter-sync-data-etcd</artifactId>
@@ -502,98 +275,121 @@
                 </exclusion>
             </exclusions>
         </dependency>
+        -->
         <!--shenyu debug plugin end-->
 
         <!--shenyu data sync start use consul-->
+        <!--
         <dependency>
             <groupId>org.apache.shenyu</groupId>
             
<artifactId>shenyu-spring-boot-starter-sync-data-consul</artifactId>
             <version>${project.version}</version>
         </dependency>
+        -->
         <!--shenyu registry start-->
 
         <!--shenyu data sync start use polaris-->
+        <!--
         <dependency>
             <groupId>org.apache.shenyu</groupId>
             
<artifactId>shenyu-spring-boot-starter-sync-data-polaris</artifactId>
             <version>${project.version}</version>
         </dependency>
+        -->
 
         <!--shenyu instance start-->
 
         <!--shenyu registry end-->
 
         <!--shenyu logging-rocketmq plugin start-->
+        <!--
         <dependency>
             <groupId>org.apache.shenyu</groupId>
             
<artifactId>shenyu-spring-boot-starter-plugin-logging-rocketmq</artifactId>
             <version>${project.version}</version>
         </dependency>
+        -->
         <!--shenyu logging-rocketmq plugin end-->
 
         <!--shenyu logging-kafka plugin start-->
+        <!--
         <dependency>
             <groupId>org.apache.shenyu</groupId>
             
<artifactId>shenyu-spring-boot-starter-plugin-logging-kafka</artifactId>
             <version>${project.version}</version>
         </dependency>
+        -->
         <!--shenyu logging-kafka plugin end-->
 
         <!--shenyu logging-rabbitmq plugin start-->
+        <!--
         <dependency>
             <groupId>org.apache.shenyu</groupId>
             
<artifactId>shenyu-spring-boot-starter-plugin-logging-rabbitmq</artifactId>
             <version>${project.version}</version>
         </dependency>
+        -->
         <!--shenyu logging-rabbitmq plugin end-->
 
         <!--shenyu logging-elasticsearch plugin start-->
+        <!--
         <dependency>
             <groupId>org.apache.shenyu</groupId>
             
<artifactId>shenyu-spring-boot-starter-plugin-logging-elasticsearch</artifactId>
             <version>${project.version}</version>
         </dependency>
+        -->
         <!--shenyu logging-elasticsearch plugin end-->
 
         <!-- shenyu logging-aliyunsls plugin start -->
+        <!--
         <dependency>
             <groupId>org.apache.shenyu</groupId>
             
<artifactId>shenyu-spring-boot-starter-plugin-logging-aliyun-sls</artifactId>
             <version>${project.version}</version>
         </dependency>
+        -->
         <!-- shenyu logging-aliyunsls plugin end -->
 
         <!-- shenyu logging-pulsar plugin start -->
+        <!--
         <dependency>
             <groupId>org.apache.shenyu</groupId>
             
<artifactId>shenyu-spring-boot-starter-plugin-logging-pulsar</artifactId>
             <version>${project.version}</version>
         </dependency>
+        -->
         <!-- shenyu logging-pulsar plugin end -->
 
         <!-- shenyu logging-tencentcls plugin start -->
+        <!--
         <dependency>
             <groupId>org.apache.shenyu</groupId>
             
<artifactId>shenyu-spring-boot-starter-plugin-logging-tencent-cls</artifactId>
             <version>${project.version}</version>
         </dependency>
+        -->
         <!-- shenyu logging-tencentcls plugin end -->
 
         <!-- shenyu logging-huaweilts plugin start -->
+        <!--
         <dependency>
             <groupId>org.apache.shenyu</groupId>
             
<artifactId>shenyu-spring-boot-starter-plugin-logging-huawei-lts</artifactId>
             <version>${project.version}</version>
         </dependency>
+        -->
         <!-- shenyu logging-huaweilts plugin end -->
 
 
         <!-- shenyu logging-clickhouse plugin start -->
+        <!--
         <dependency>
             <groupId>org.apache.shenyu</groupId>
             
<artifactId>shenyu-spring-boot-starter-plugin-logging-clickhouse</artifactId>
             <version>${project.version}</version>
         </dependency>
+        -->
         <!-- shenyu logging-clickhouse plugin end -->
 
         <!-- shenyu kubernetes controller starter -->
@@ -641,6 +437,14 @@
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
                 <version>${spring-boot.version}</version>
+                <executions>
+                    <execution>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
             </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
diff --git a/shenyu-bootstrap/src/main/resources/application.yml 
b/shenyu-bootstrap/src/main/resources/application.yml
index 4655938bde..2a52beee8c 100644
--- a/shenyu-bootstrap/src/main/resources/application.yml
+++ b/shenyu-bootstrap/src/main/resources/application.yml
@@ -108,7 +108,7 @@ shenyu:
       # set to false, user can custom the netty tcp server config.
       webServerFactoryEnabled: true
       selectCount: 1
-      workerCount: 8
+      # workerCount: 8
       accessLog: false
       serverSocketChannel:
         soBackLog: 128
@@ -194,9 +194,9 @@ shenyu:
 #      workerCount: 8
 #      daemon: true
   register:
-    enabled: false
-    registerType: zookeeper #etcd #consul
-    serverLists: localhost:2181 #http://localhost:2379 #localhost:8848
+    enabled: true
+    registerType: http
+    serverLists: http://localhost:9095
     props:
   cross:
     enabled: true
diff --git 
a/shenyu-plugin/shenyu-plugin-api/src/main/java/org/apache/shenyu/plugin/api/ShenyuPlugin.java
 
b/shenyu-plugin/shenyu-plugin-api/src/main/java/org/apache/shenyu/plugin/api/ShenyuPlugin.java
index 22cfe72963..e96b65e48b 100644
--- 
a/shenyu-plugin/shenyu-plugin-api/src/main/java/org/apache/shenyu/plugin/api/ShenyuPlugin.java
+++ 
b/shenyu-plugin/shenyu-plugin-api/src/main/java/org/apache/shenyu/plugin/api/ShenyuPlugin.java
@@ -138,7 +138,9 @@ public interface ShenyuPlugin {
      * @param exchange context
      */
     default void before(ServerWebExchange exchange) {
-        exchange.getAttributes().put(Constants.PLUGIN_START_TIME + named(), 
System.currentTimeMillis());
+        if (LOG.isDebugEnabled()) {
+            exchange.getAttributes().put(Constants.PLUGIN_START_TIME + 
named(), System.currentTimeMillis());
+        }
     }
 
     /**
@@ -147,10 +149,14 @@ public interface ShenyuPlugin {
      * @param exchange context
      */
     default void after(ServerWebExchange exchange) {
-        long currentTimeMillis = System.currentTimeMillis();
-        long startTime = (long) 
exchange.getAttributes().get(Constants.PLUGIN_START_TIME + named());
-        LOG.debug("shenyu traceId:{}, plugin named:{}, cost:{}", 
exchange.getLogPrefix(), named(), currentTimeMillis - startTime);
-        exchange.getAttributes().remove(Constants.PLUGIN_START_TIME + named());
+        if (LOG.isDebugEnabled()) {
+            long currentTimeMillis = System.currentTimeMillis();
+            Object startTime = 
exchange.getAttributes().get(Constants.PLUGIN_START_TIME + named());
+            if (Objects.nonNull(startTime)) {
+                LOG.debug("shenyu traceId:{}, plugin named:{}, cost:{}", 
exchange.getLogPrefix(), named(), currentTimeMillis - (long) startTime);
+                exchange.getAttributes().remove(Constants.PLUGIN_START_TIME + 
named());
+            }
+        }
     }
 }
 
diff --git 
a/shenyu-web/src/main/java/org/apache/shenyu/web/handler/ShenyuWebHandler.java 
b/shenyu-web/src/main/java/org/apache/shenyu/web/handler/ShenyuWebHandler.java
index 460d113f92..2ac3fb22fa 100644
--- 
a/shenyu-web/src/main/java/org/apache/shenyu/web/handler/ShenyuWebHandler.java
+++ 
b/shenyu-web/src/main/java/org/apache/shenyu/web/handler/ShenyuWebHandler.java
@@ -121,16 +121,19 @@ public final class ShenyuWebHandler implements 
WebHandler, ApplicationListener<P
      */
     @Override
     public Mono<Void> handle(@NonNull final ServerWebExchange exchange) {
-        try {
-            before(exchange);
-            Mono<Void> execute = new 
DefaultShenyuPluginChain(plugins).execute(exchange);
-            if (scheduled) {
-                return execute.subscribeOn(scheduler);
+        Mono<Void> execute = Mono.defer(() -> {
+            if (LOG.isDebugEnabled()) {
+                before(exchange);
             }
-            return execute;
-        } finally {
-            after(exchange);
+            return new DefaultShenyuPluginChain(plugins).execute(exchange);
+        });
+        if (scheduled) {
+            execute = execute.subscribeOn(scheduler);
+        }
+        if (LOG.isDebugEnabled()) {
+            execute = execute.doFinally(s -> after(exchange));
         }
+        return execute;
     }
     
     /**

Reply via email to