From ef2ad05696f05c4ae69ce93fbe539a60072fd08d Mon Sep 17 00:00:00 2001 From: imaxun <1627979701@qq.com> Date: Fri, 20 May 2022 15:30:22 +0800 Subject: [PATCH] refactor:add registerFilterHandler #31 --- .../registry/PolarisServiceRegistry.java | 57 +++++++++++-------- ...larisServiceRegistryAutoConfiguration.java | 21 ++++--- .../filter/DefaultRegisterFilterHandler.java | 31 ++++++++-- .../filter/RegisterFilterHandler.java | 32 ++++++++++- .../filter/RegisterFilterHandlerContext.java | 15 ----- 5 files changed, 103 insertions(+), 53 deletions(-) delete mode 100644 spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/filter/RegisterFilterHandlerContext.java diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistry.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistry.java index 4928e7c48..581d06072 100644 --- a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistry.java +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistry.java @@ -18,12 +18,17 @@ package com.tencent.cloud.polaris.registry; +import java.util.LinkedList; +import java.util.List; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + import com.tencent.cloud.common.metadata.config.MetadataLocalProperties; import com.tencent.cloud.polaris.PolarisDiscoveryProperties; import com.tencent.cloud.polaris.discovery.PolarisDiscoveryHandler; import com.tencent.cloud.polaris.registry.filter.DefaultRegisterFilterHandler; import com.tencent.cloud.polaris.registry.filter.RegisterFilterHandler; -import com.tencent.cloud.polaris.registry.filter.RegisterFilterHandlerContext; import com.tencent.cloud.polaris.util.OkHttpUtil; import com.tencent.polaris.api.core.ProviderAPI; import com.tencent.polaris.api.exception.PolarisException; @@ -36,16 +41,11 @@ import com.tencent.polaris.client.util.NamedThreadFactory; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; + import org.springframework.beans.BeanUtils; import org.springframework.cloud.client.serviceregistry.Registration; import org.springframework.cloud.client.serviceregistry.ServiceRegistry; -import java.util.LinkedList; -import java.util.List; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; - import static org.springframework.util.ReflectionUtils.rethrowRuntimeException; /** @@ -79,19 +79,20 @@ public class PolarisServiceRegistry implements ServiceRegistry { } public PolarisServiceRegistry(PolarisDiscoveryProperties polarisDiscoveryProperties, - PolarisDiscoveryHandler polarisDiscoveryHandler, - MetadataLocalProperties metadataLocalProperties) { + PolarisDiscoveryHandler polarisDiscoveryHandler, + MetadataLocalProperties metadataLocalProperties) { this.polarisDiscoveryProperties = polarisDiscoveryProperties; this.polarisDiscoveryHandler = polarisDiscoveryHandler; this.metadataLocalProperties = metadataLocalProperties; this.registerFilterHandler = new LinkedList<>(); - this.addRegisterFilterHandler(new DefaultRegisterFilterHandler()); + this.registerFilterHandler.add(new DefaultRegisterFilterHandler()); if (polarisDiscoveryProperties.isHeartbeatEnabled()) { this.heartbeatExecutor = Executors.newSingleThreadScheduledExecutor( new NamedThreadFactory("spring-cloud-heartbeat")); - } else { + } + else { this.heartbeatExecutor = null; } } @@ -122,8 +123,9 @@ public class PolarisServiceRegistry implements ServiceRegistry { List registerFilterHandlerInstances = registerFilterHandlerInstances(); try { registerFilterHandlerInstances.forEach(registerFilterHandler -> { - if (!registerFilterHandler.beforeInvoke(new RegisterFilterHandlerContext(instanceRegisterRequest))) { - log.error("the registerFilterHandler return false on before invoke"); + if (!registerFilterHandler.beforeInvoke(instanceRegisterRequest)) { + log.error("{} the registerFilterHandler return false on before invoke", registerFilterHandler.getClass() + .getName()); } }); @@ -140,14 +142,17 @@ public class PolarisServiceRegistry implements ServiceRegistry { // Start the heartbeat thread after the registration is successful. heartbeat(heartbeatRequest); } - } catch (Exception e) { + } + catch (Exception e) { log.error("polaris registry, {} register failed...{},", registration.getServiceId(), registration, e); rethrowRuntimeException(e); - } finally { + } + finally { registerFilterHandlerInstances.forEach(registerFilterHandler -> { - if (!registerFilterHandler.afterInvoke(new RegisterFilterHandlerContext(instanceRegisterRequest))) { - log.error("the registerFilterHandler return false on after invoke"); + if (!registerFilterHandler.afterInvoke(instanceRegisterRequest)) { + log.error("{} registerFilterHandler return false on after invoke", registerFilterHandler.getClass() + .getName()); } }); } @@ -173,10 +178,12 @@ public class PolarisServiceRegistry implements ServiceRegistry { try { ProviderAPI providerClient = polarisDiscoveryHandler.getProviderAPI(); providerClient.deRegister(deRegisterRequest); - } catch (Exception e) { + } + catch (Exception e) { log.error("ERR_POLARIS_DEREGISTER, de-register failed...{},", registration, e); - } finally { + } + finally { if (null != heartbeatExecutor) { heartbeatExecutor.shutdown(); } @@ -245,9 +252,11 @@ public class PolarisServiceRegistry implements ServiceRegistry { } polarisDiscoveryHandler.getProviderAPI().heartbeat(heartbeatRequest); - } catch (PolarisException e) { + } + catch (PolarisException e) { log.error("polaris heartbeat[{}]", e.getCode(), e); - } catch (Exception e) { + } + catch (Exception e) { log.error("polaris heartbeat runtime error", e); } }, ttl, ttl, TimeUnit.SECONDS); @@ -259,12 +268,14 @@ public class PolarisServiceRegistry implements ServiceRegistry { log.info("register filterHandler name[{}]", instance.getClass().getName()); if (instance instanceof RegisterFilterHandler) { registerFilterHandlerInstances.add((RegisterFilterHandler) instance); - } else if (instance instanceof Class) { + } + else if (instance instanceof Class) { try { Class cl = (Class) instance; RegisterFilterHandler filter = (RegisterFilterHandler) cl.newInstance(); registerFilterHandlerInstances.add(filter); - } catch (Exception e) { + } + catch (Exception e) { log.error("register filterHandler name[{}] error{}", instance.getClass().getName(), e); rethrowRuntimeException(e); } diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistryAutoConfiguration.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistryAutoConfiguration.java index 9cfada0ab..032805a30 100644 --- a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistryAutoConfiguration.java +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistryAutoConfiguration.java @@ -18,6 +18,9 @@ package com.tencent.cloud.polaris.registry; +import java.util.LinkedList; +import java.util.List; + import com.google.common.collect.Lists; import com.tencent.cloud.common.metadata.config.MetadataLocalProperties; import com.tencent.cloud.polaris.DiscoveryPropertiesAutoConfiguration; @@ -39,9 +42,6 @@ import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationP import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import java.util.LinkedList; -import java.util.List; - /** * Autoconfiguration of service registry of Polaris. * @@ -57,9 +57,10 @@ import java.util.List; PolarisDiscoveryAutoConfiguration.class}) public class PolarisServiceRegistryAutoConfiguration { + @Bean @ConditionalOnMissingBean - protected List registerFilterHandler() { + protected List registerFilterHandlers() { return Lists.newLinkedList(); } @@ -67,23 +68,25 @@ public class PolarisServiceRegistryAutoConfiguration { @ConditionalOnMissingBean protected PolarisServiceRegistry polarisServiceRegistry( PolarisDiscoveryProperties polarisDiscoveryProperties, PolarisDiscoveryHandler polarisDiscoveryHandler, - MetadataLocalProperties metadataLocalProperties, @Autowired(required = false) LinkedList registerFilterHandler) { + MetadataLocalProperties metadataLocalProperties, @Autowired(required = false) LinkedList registerFilterHandlers) { PolarisServiceRegistry polarisServiceRegistry = new PolarisServiceRegistry(polarisDiscoveryProperties, polarisDiscoveryHandler, metadataLocalProperties); - if (registerFilterHandler == null) { - registerFilterHandler = new LinkedList<>(); + if (registerFilterHandlers == null) { + registerFilterHandlers = new LinkedList<>(); } - registerFilterHandler.forEach(polarisServiceRegistry::addRegisterFilterHandler); + registerFilterHandlers.forEach(polarisServiceRegistry::addRegisterFilterHandler); return polarisServiceRegistry; } + @Bean @ConditionalOnMissingBean @ConditionalOnBean(AutoServiceRegistrationProperties.class) protected PolarisRegistration polarisRegistration( DiscoveryPropertiesAutoConfiguration discoveryPropertiesAutoConfiguration, PolarisDiscoveryProperties polarisDiscoveryProperties, SDKContext context) { - return new PolarisRegistration(discoveryPropertiesAutoConfiguration, + PolarisRegistration polarisRegistration = new PolarisRegistration(discoveryPropertiesAutoConfiguration, polarisDiscoveryProperties, context); + return polarisRegistration; } @Bean diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/filter/DefaultRegisterFilterHandler.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/filter/DefaultRegisterFilterHandler.java index 52cf731cf..bfbae6dde 100644 --- a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/filter/DefaultRegisterFilterHandler.java +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/filter/DefaultRegisterFilterHandler.java @@ -1,21 +1,44 @@ +/* + * Tencent is pleased to support the open source community by making Spring Cloud Tencent available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * Unless required by applicable law or agreed to in writing, software distributed + * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR + * CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ package com.tencent.cloud.polaris.registry.filter; +import com.tencent.polaris.api.rpc.InstanceRegisterRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; + +/** + * service registration of Polaris filter DefaultHandler. + * + * @author imaxun + */ public class DefaultRegisterFilterHandler implements RegisterFilterHandler { private static final Logger log = LoggerFactory .getLogger(DefaultRegisterFilterHandler.class); @Override - public boolean beforeInvoke(RegisterFilterHandlerContext registerFilterHandlerContext) { - log.info("defaultRegisterFilterHandler beforeInvoke info"); + public boolean beforeInvoke(InstanceRegisterRequest instanceRegisterRequest) { + log.debug("defaultRegisterFilterHandler beforeInvoke info"); return true; } @Override - public boolean afterInvoke(RegisterFilterHandlerContext registerFilterHandlerContext) { - log.info("defaultRegisterFilterHandler beforeInvoke afterInvoke"); + public boolean afterInvoke(InstanceRegisterRequest instanceRegisterRequest) { + log.debug("defaultRegisterFilterHandler beforeInvoke afterInvoke"); return true; } diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/filter/RegisterFilterHandler.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/filter/RegisterFilterHandler.java index fa8f5e81b..388c96da0 100644 --- a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/filter/RegisterFilterHandler.java +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/filter/RegisterFilterHandler.java @@ -1,11 +1,39 @@ +/* + * Tencent is pleased to support the open source community by making Spring Cloud Tencent available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * Unless required by applicable law or agreed to in writing, software distributed + * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR + * CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ package com.tencent.cloud.polaris.registry.filter; +import com.tencent.polaris.api.rpc.InstanceRegisterRequest; +/** + * service registration of Polaris filter Handler. + * + * @author imaxun + */ public interface RegisterFilterHandler { - boolean beforeInvoke(RegisterFilterHandlerContext registerFilterHandlerContext); + /** + * service registration before execute + */ + boolean beforeInvoke(InstanceRegisterRequest instanceRegisterRequest); - boolean afterInvoke(RegisterFilterHandlerContext registerFilterHandlerContext); + /** + * service registration after execute + */ + boolean afterInvoke(InstanceRegisterRequest instanceRegisterRequest); boolean isSingleInstance(); } diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/filter/RegisterFilterHandlerContext.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/filter/RegisterFilterHandlerContext.java deleted file mode 100644 index 09806d063..000000000 --- a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/filter/RegisterFilterHandlerContext.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.tencent.cloud.polaris.registry.filter; - -import com.tencent.polaris.api.rpc.InstanceRegisterRequest; - -public class RegisterFilterHandlerContext { - private InstanceRegisterRequest instanceRegisterRequest; - - public InstanceRegisterRequest getInstanceRegisterRequest() { - return instanceRegisterRequest; - } - - public RegisterFilterHandlerContext(InstanceRegisterRequest instanceRegisterRequest) { - this.instanceRegisterRequest = instanceRegisterRequest; - } -}