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());
- }
- }
}