refactor:add registerFilterHandler #31

pull/181/head
imaxun 3 years ago
parent dce086ac97
commit ef2ad05696

@ -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;
/**
@ -86,12 +86,13 @@ public class PolarisServiceRegistry implements ServiceRegistry<Registration> {
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<Registration> {
List<RegisterFilterHandler> 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<Registration> {
// 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<Registration> {
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<Registration> {
}
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<Registration> {
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);
}

@ -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> registerFilterHandler() {
protected List<RegisterFilterHandler> 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> registerFilterHandler) {
MetadataLocalProperties metadataLocalProperties, @Autowired(required = false) LinkedList<RegisterFilterHandler> 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

@ -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;
}

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

@ -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;
}
}
Loading…
Cancel
Save