Fix Spring Listener order (#12911)

This commit is contained in:
Albumen Kevin 2023-08-16 14:30:52 +08:00 committed by GitHub
parent 4dbd31ebb1
commit 972a0814b9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 20 additions and 10 deletions

View File

@ -190,7 +190,7 @@ public class ServiceConfig<T> extends ServiceConfigBase<T> {
}
@Override
public void unexport() {
public synchronized void unexport() {
if (!exported) {
return;
}

View File

@ -335,6 +335,13 @@ public class DefaultModuleDeployer extends AbstractDeployer<ModuleModel> impleme
private void onModuleFailed(String msg, Throwable ex) {
try {
try {
// un-export all services if start failure
unexportServices();
} catch (Throwable t) {
logger.info("Failed to un-export services after module failed.", t);
}
setFailed(ex);
logger.error(CONFIG_FAILED_START_MODEL, "", "", "Model start failed: " + msg, ex);
applicationDeployer.notifyModuleChanged(moduleModel, DeployState.FAILED);
@ -450,8 +457,8 @@ public class DefaultModuleDeployer extends AbstractDeployer<ModuleModel> impleme
try {
configManager.removeConfig(sc);
sc.unexport();
} catch (Exception ignored) {
// ignored
} catch (Throwable t) {
logger.info("Failed to un-export service. Service Key: " + sc.getUniqueServiceName(), t);
}
});
exportedServices.clear();

View File

@ -182,7 +182,7 @@ public class DubboDeployApplicationListener implements ApplicationListener<Appli
@Override
public int getOrder() {
return HIGHEST_PRECEDENCE;
return LOWEST_PRECEDENCE;
}
}

View File

@ -1015,16 +1015,19 @@ public class RegistryProtocol implements Protocol, ScopeModelAware {
@Override
public synchronized void unregister() {
if (registered.compareAndSet(true, false)) {
Registry registry = RegistryProtocol.this.getRegistry(getRegistryUrl(originInvoker));
URL registryUrl = getRegistryUrl(originInvoker);
Registry registry = RegistryProtocol.this.getRegistry(registryUrl);
ProviderModel providerModel = frameworkModel.getServiceRepository()
.lookupExportedService(getRegisterUrl().getServiceKey());
List<ProviderModel.RegisterStatedURL> statedUrls = providerModel.getStatedUrl();
if (statedUrls.stream()
.filter(u -> u.getRegistryUrl().equals(getRegisterUrl())
&& u.getProviderUrl().getProtocol().equals(getRegisterUrl().getProtocol()))
.anyMatch(ProviderModel.RegisterStatedURL::isRegistered)) {
List<ProviderModel.RegisterStatedURL> statedURLs =
providerModel.getStatedUrl()
.stream()
.filter(u -> u.getRegistryUrl().equals(registryUrl)
&& u.getProviderUrl().getProtocol().equals(getRegisterUrl().getProtocol()))
.collect(Collectors.toList());
if (statedURLs.isEmpty() || statedURLs.stream().anyMatch(ProviderModel.RegisterStatedURL::isRegistered)) {
try {
registry.unregister(registerUrl);
} catch (Throwable t) {