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 0d79da5 [type:fixbug] NPE when register by other register center
(#2151)
0d79da5 is described below
commit 0d79da5010fce3b807bea1df9979bc25a0965d94
Author: SaberSola <[email protected]>
AuthorDate: Mon Sep 27 19:26:00 2021 +0800
[type:fixbug] NPE when register by other register center (#2151)
* fix static resource index.html
* fix npe exception when register by other register center
* fix npe exception when register by other register center
* merge master
Co-authored-by: zhanglei06469 <[email protected]>
---
.../subscriber/URIRegisterExecutorSubscriber.java | 19 ++++++++++++-----
.../ShenyuClientRegisterDefaultServiceImpl.java | 24 ++--------------------
.../ShenyuClientRegisterServiceFactory.java | 14 -------------
.../apache/shenyu/common/enums/RpcTypeEnum.java | 2 +-
4 files changed, 17 insertions(+), 42 deletions(-)
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 4cadbc9..702c208 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
@@ -23,6 +23,7 @@ import org.apache.shenyu.register.common.dto.URIRegisterDTO;
import org.apache.shenyu.register.common.subsriber.ExecutorTypeSubscriber;
import org.apache.shenyu.register.common.type.DataType;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@@ -32,9 +33,9 @@ import java.util.stream.Collectors;
* The type Uri register executor subscriber.
*/
public class URIRegisterExecutorSubscriber implements
ExecutorTypeSubscriber<URIRegisterDTO> {
-
+
private final Map<String, ShenyuClientRegisterServiceFactory>
shenyuClientRegisterService;
-
+
/**
* Instantiates a new Uri register executor subscriber.
*
@@ -43,15 +44,23 @@ public class URIRegisterExecutorSubscriber implements
ExecutorTypeSubscriber<URI
public URIRegisterExecutorSubscriber(final Map<String,
ShenyuClientRegisterServiceFactory> shenyuClientRegisterService) {
this.shenyuClientRegisterService = shenyuClientRegisterService;
}
-
+
@Override
public DataType getType() {
return DataType.URI;
}
-
+
@Override
public void executor(final Collection<URIRegisterDTO> dataList) {
Map<String, List<URIRegisterDTO>> listMap =
dataList.stream().collect(Collectors.groupingBy(URIRegisterDTO::getContextPath));
- listMap.forEach((contextPath, dtoList) ->
shenyuClientRegisterService.get(Constants.DEFAULT.toLowerCase()).registerURIDefault(contextPath,
dtoList));
+ listMap.forEach((contextPath, dtoList) -> {
+ List<String> uriList = new ArrayList<>();
+ dataList.forEach(uriRegisterDTO -> {
+ if (uriRegisterDTO.getHost() != null &&
uriRegisterDTO.getPort() != null) {
+ uriList.add(String.join(":", uriRegisterDTO.getHost(),
uriRegisterDTO.getPort().toString()));
+ }
+ });
+
shenyuClientRegisterService.get(Constants.DEFAULT.toLowerCase()).registerURI(contextPath,
uriList);
+ });
}
}
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/register/ShenyuClientRegisterDefaultServiceImpl.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/register/ShenyuClientRegisterDefaultServiceImpl.java
index 553d321..4a77702 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/register/ShenyuClientRegisterDefaultServiceImpl.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/register/ShenyuClientRegisterDefaultServiceImpl.java
@@ -32,7 +32,6 @@ import org.apache.shenyu.common.enums.DataEventTypeEnum;
import org.apache.shenyu.common.enums.PluginEnum;
import org.apache.shenyu.common.utils.GsonUtils;
import org.apache.shenyu.register.common.dto.MetaDataRegisterDTO;
-import org.apache.shenyu.register.common.dto.URIRegisterDTO;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service;
@@ -70,31 +69,17 @@ public class ShenyuClientRegisterDefaultServiceImpl extends
AbstractShenyuClient
public String registerURI(final String contextPath, final List<String>
uriList) {
SelectorDO selector = selectorService.findByName(contextPath);
SelectorData selectorData = selectorService.buildByName(contextPath);
- String handler =
GsonUtils.getInstance().toJson(buildDivideUpstreamList(uriList));
- selector.setHandle(handler);
- selectorData.setHandle(handler);
- selectorService.updateSelective(selector);
- // publish change event.
- eventPublisher.publishEvent(new
DataChangedEvent(ConfigGroupEnum.SELECTOR, DataEventTypeEnum.UPDATE,
- Collections.singletonList(selectorData)));
- return ShenyuResultMessage.SUCCESS;
- }
-
- @Override
- public String registerURIDefault(final String contextPath, final
List<URIRegisterDTO> registerDTOList) {
- SelectorDO selector = selectorService.findByName(contextPath);
- SelectorData selectorData = selectorService.buildByName(contextPath);
PluginDO pluginDO = pluginMapper.selectById(selector.getPluginId());
String handler = null;
if (PluginEnum.SPRING_CLOUD.getName().equals(pluginDO.getName())) {
if (Objects.nonNull(selector.getHandle())) {
SpringCloudSelectorHandle springCloudSelectorHandle =
GsonUtils.getInstance()
.fromJson(selector.getHandle(),
SpringCloudSelectorHandle.class);
-
springCloudSelectorHandle.setDivideUpstreams(buildDivideUpstreams(registerDTOList));
+
springCloudSelectorHandle.setDivideUpstreams(buildDivideUpstreamList(uriList));
handler =
GsonUtils.getInstance().toJson(springCloudSelectorHandle);
}
} else {
- handler =
GsonUtils.getInstance().toJson(buildDivideUpstreams(registerDTOList));
+ handler =
GsonUtils.getInstance().toJson(buildDivideUpstreamList(uriList));
}
selector.setHandle(handler);
selectorData.setHandle(handler);
@@ -123,9 +108,4 @@ public class ShenyuClientRegisterDefaultServiceImpl extends
AbstractShenyuClient
private List<DivideUpstream> buildDivideUpstreamList(final List<String>
uriList) {
return
uriList.stream().map(this::buildDivideUpstream).collect(Collectors.toList());
}
-
- private List<DivideUpstream> buildDivideUpstreams(final
List<URIRegisterDTO> registerDTOList) {
- return registerDTOList.stream()
- .map(s -> buildDivideUpstream(String.join(":", s.getHost(),
s.getPort().toString()))).collect(Collectors.toList());
- }
}
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/register/ShenyuClientRegisterServiceFactory.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/register/ShenyuClientRegisterServiceFactory.java
index a52239a..c19bfcc 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/register/ShenyuClientRegisterServiceFactory.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/register/ShenyuClientRegisterServiceFactory.java
@@ -17,9 +17,7 @@
package org.apache.shenyu.admin.service.register;
-import org.apache.shenyu.admin.utils.ShenyuResultMessage;
import org.apache.shenyu.register.common.dto.MetaDataRegisterDTO;
-import org.apache.shenyu.register.common.dto.URIRegisterDTO;
import java.util.List;
@@ -28,18 +26,6 @@ import java.util.List;
*/
public interface ShenyuClientRegisterServiceFactory {
-
- /**
- * uri upstream update.
- *
- * @param contextPath context paht
- * @param registerDTOList registerDTOList
- * @return the string
- */
- default String registerURIDefault(String contextPath, List<URIRegisterDTO>
registerDTOList) {
- return ShenyuResultMessage.SUCCESS;
- }
-
/**
* Register meta data.
*
diff --git
a/shenyu-common/src/main/java/org/apache/shenyu/common/enums/RpcTypeEnum.java
b/shenyu-common/src/main/java/org/apache/shenyu/common/enums/RpcTypeEnum.java
index b6f543b..e104148 100644
---
a/shenyu-common/src/main/java/org/apache/shenyu/common/enums/RpcTypeEnum.java
+++
b/shenyu-common/src/main/java/org/apache/shenyu/common/enums/RpcTypeEnum.java
@@ -127,7 +127,7 @@ public enum RpcTypeEnum {
* @return operator support.
*/
public static List<RpcTypeEnum> acquireSupportMetadatas() {
- return Arrays.asList(RpcTypeEnum.DUBBO, RpcTypeEnum.GRPC,
RpcTypeEnum.SPRING_CLOUD, RpcTypeEnum.SOFA, RpcTypeEnum.TARS,
RpcTypeEnum.MOTAN);
+ return Arrays.asList(RpcTypeEnum.HTTP, RpcTypeEnum.DUBBO,
RpcTypeEnum.GRPC, RpcTypeEnum.SPRING_CLOUD, RpcTypeEnum.SOFA, RpcTypeEnum.TARS,
RpcTypeEnum.MOTAN);
}
/**