You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shenyu.apache.org by xi...@apache.org on 2022/06/10 10:33:47 UTC

[incubator-shenyu] branch master updated: [type: refactor] refactor uri register (#3517)

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

xiaoyu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-shenyu.git


The following commit(s) were added to refs/heads/master by this push:
     new dd16194c5 [type: refactor] refactor uri register (#3517)
dd16194c5 is described below

commit dd16194c5cd2357e5bf52b2bab8a0db715285776
Author: dragon-zhang <ha...@webuy.ai>
AuthorDate: Fri Jun 10 18:33:39 2022 +0800

    [type: refactor] refactor uri register (#3517)
    
    * [type:refactor] code polish in admin
    
    * [type:refactor] code polish in admin
    
    * fix test bug
---
 .../subscriber/MetadataExecutorSubscriber.java     | 13 ++++++------
 .../subscriber/URIRegisterExecutorSubscriber.java  | 23 +++++++++++++---------
 .../URIRegisterExecutorSubscriberTest.java         | 22 +++------------------
 3 files changed, 24 insertions(+), 34 deletions(-)

diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/disruptor/subscriber/MetadataExecutorSubscriber.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/disruptor/subscriber/MetadataExecutorSubscriber.java
index b7d9e2a20..babd79538 100644
--- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/disruptor/subscriber/MetadataExecutorSubscriber.java
+++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/disruptor/subscriber/MetadataExecutorSubscriber.java
@@ -24,7 +24,7 @@ import org.apache.shenyu.register.common.type.DataType;
 
 import java.util.Collection;
 import java.util.Map;
-import java.util.Objects;
+import java.util.Optional;
 
 /**
  * The type Metadata executor subscriber.
@@ -45,11 +45,12 @@ public class MetadataExecutorSubscriber implements ExecutorTypeSubscriber<MetaDa
     @Override
     public void executor(final Collection<MetaDataRegisterDTO> metaDataRegisterDTOList) {
         for (MetaDataRegisterDTO metaDataRegisterDTO : metaDataRegisterDTOList) {
-            ShenyuClientRegisterService shenyuClientRegisterService = this.shenyuClientRegisterService.get(metaDataRegisterDTO.getRpcType());
-            Objects.requireNonNull(shenyuClientRegisterService);
-            synchronized (shenyuClientRegisterService) {
-                shenyuClientRegisterService.register(metaDataRegisterDTO);
-            }
+            Optional.ofNullable(this.shenyuClientRegisterService.get(metaDataRegisterDTO.getRpcType()))
+                    .ifPresent(shenyuClientRegisterService -> {
+                        synchronized (shenyuClientRegisterService) {
+                            shenyuClientRegisterService.register(metaDataRegisterDTO);
+                        }
+                    });
         }
     }
 }
diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/disruptor/subscriber/URIRegisterExecutorSubscriber.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/disruptor/subscriber/URIRegisterExecutorSubscriber.java
index 3a7a5a4df..a07624387 100644
--- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/disruptor/subscriber/URIRegisterExecutorSubscriber.java
+++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/disruptor/subscriber/URIRegisterExecutorSubscriber.java
@@ -30,6 +30,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
+import java.util.stream.Collectors;
 
 /**
  * The type Uri register executor subscriber.
@@ -57,14 +58,22 @@ public class URIRegisterExecutorSubscriber implements ExecutorTypeSubscriber<URI
         if (CollectionUtils.isEmpty(dataList)) {
             return;
         }
-        findService(dataList).ifPresent(service -> {
-            Map<String, List<URIRegisterDTO>> listMap = buildData(dataList);
-            listMap.forEach(service::registerURI);
-        });
+        final Map<String, List<URIRegisterDTO>> groupByRpcType = dataList.stream()
+                .filter(data -> StringUtils.isNotBlank(data.getRpcType()))
+                .collect(Collectors.groupingBy(URIRegisterDTO::getRpcType));
+        for (Map.Entry<String, List<URIRegisterDTO>> entry : groupByRpcType.entrySet()) {
+            final String rpcType = entry.getKey();
+            Optional.ofNullable(shenyuClientRegisterService.get(rpcType))
+                    .ifPresent(service -> {
+                        final List<URIRegisterDTO> list = entry.getValue();
+                        Map<String, List<URIRegisterDTO>> listMap = buildData(list);
+                        listMap.forEach(service::registerURI);
+                    });
+        }
     }
     
     private Map<String, List<URIRegisterDTO>> buildData(final Collection<URIRegisterDTO> dataList) {
-        Map<String, List<URIRegisterDTO>> resultMap = new HashMap<>();
+        Map<String, List<URIRegisterDTO>> resultMap = new HashMap<>(8);
         for (URIRegisterDTO dto : dataList) {
             String contextPath = dto.getContextPath();
             String key = StringUtils.isNotEmpty(contextPath) ? contextPath : dto.getAppName();
@@ -80,8 +89,4 @@ public class URIRegisterExecutorSubscriber implements ExecutorTypeSubscriber<URI
         }
         return resultMap;
     }
-    
-    private Optional<ShenyuClientRegisterService> findService(final Collection<URIRegisterDTO> dataList) {
-        return dataList.stream().map(dto -> shenyuClientRegisterService.get(dto.getRpcType())).findFirst();
-    }
 }
diff --git a/shenyu-admin/src/test/java/org/apache/shenyu/admin/disruptor/subscriber/URIRegisterExecutorSubscriberTest.java b/shenyu-admin/src/test/java/org/apache/shenyu/admin/disruptor/subscriber/URIRegisterExecutorSubscriberTest.java
index aa165e9b6..dca0897fa 100644
--- a/shenyu-admin/src/test/java/org/apache/shenyu/admin/disruptor/subscriber/URIRegisterExecutorSubscriberTest.java
+++ b/shenyu-admin/src/test/java/org/apache/shenyu/admin/disruptor/subscriber/URIRegisterExecutorSubscriberTest.java
@@ -18,6 +18,7 @@
 package org.apache.shenyu.admin.disruptor.subscriber;
     
 import org.apache.shenyu.admin.service.register.ShenyuClientRegisterService;
+import org.apache.shenyu.common.enums.RpcTypeEnum;
 import org.apache.shenyu.common.exception.ShenyuException;
 import org.apache.shenyu.register.common.dto.URIRegisterDTO;
 import org.apache.shenyu.register.common.type.DataType;
@@ -34,7 +35,6 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
-import java.util.Optional;
     
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.mockito.ArgumentMatchers.any;
@@ -65,7 +65,8 @@ public class URIRegisterExecutorSubscriberTest {
         List<URIRegisterDTO> list = new ArrayList<>();
         uriRegisterExecutorSubscriber.executor(list);
         assertEquals(true, list.isEmpty());
-        list.add(URIRegisterDTO.builder().appName("test").contextPath("/test").build());
+        list.add(URIRegisterDTO.builder().rpcType(RpcTypeEnum.HTTP.getName())
+                .appName("test").contextPath("/test").build());
         ShenyuClientRegisterService service = mock(ShenyuClientRegisterService.class);
         when(shenyuClientRegisterService.get(any())).thenReturn(service);
         uriRegisterExecutorSubscriber.executor(list);
@@ -90,21 +91,4 @@ public class URIRegisterExecutorSubscriberTest {
             throw new ShenyuException(e.getCause());
         }
     }
-    
-    @Test
-    public void testFindService() {
-        try {
-            List<URIRegisterDTO> list = new ArrayList<>();
-            list.add(URIRegisterDTO.builder().appName("test1").build());
-            list.add(URIRegisterDTO.builder().appName("test2").build());
-            ShenyuClientRegisterService service = mock(ShenyuClientRegisterService.class);
-            when(shenyuClientRegisterService.get(any())).thenReturn(service);
-            Method testMethod = uriRegisterExecutorSubscriber.getClass().getDeclaredMethod("findService", Collection.class);
-            testMethod.setAccessible(true);
-            Optional<ShenyuClientRegisterService> result = (Optional) testMethod.invoke(uriRegisterExecutorSubscriber, list);
-            assertEquals(service, result.get());
-        } catch (Exception e) {
-            throw new ShenyuException(e.getCause());
-        }
-    }
 }