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 <[email protected]>
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());
- }
- }
}