diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboServiceRegistrationAutoConfiguration.java b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboServiceRegistrationAutoConfiguration.java index 5861fdf0..b0897e6c 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboServiceRegistrationAutoConfiguration.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboServiceRegistrationAutoConfiguration.java @@ -24,8 +24,9 @@ import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import com.alibaba.cloud.dubbo.autoconfigure.condition.MissingSpringCloudRegistryConfigPropertyCondition; -import com.alibaba.cloud.dubbo.metadata.DubboBootstrapCommandLineRunner; -import com.alibaba.cloud.dubbo.metadata.event.DubboBootstrapStartedEvent; +import com.alibaba.cloud.dubbo.bootstrap.DubboBootstrapStartCommandLineRunner; +import com.alibaba.cloud.dubbo.bootstrap.DubboBootstrapWrapper; +import com.alibaba.cloud.dubbo.bootstrap.event.DubboBootstrapStartedEvent; import com.alibaba.cloud.dubbo.metadata.repository.DubboServiceMetadataRepository; import com.alibaba.cloud.dubbo.registry.DubboServiceRegistrationEventPublishingAspect; import com.alibaba.cloud.dubbo.registry.event.ServiceInstancePreDeregisteredEvent; @@ -60,7 +61,6 @@ import org.springframework.context.annotation.Conditional; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.context.event.EventListener; -import org.springframework.core.annotation.Order; import static com.alibaba.cloud.dubbo.autoconfigure.DubboServiceRegistrationAutoConfiguration.CONSUL_AUTO_SERVICE_AUTO_CONFIGURATION_CLASS_NAME; import static com.alibaba.cloud.dubbo.autoconfigure.DubboServiceRegistrationAutoConfiguration.EUREKA_CLIENT_AUTO_CONFIGURATION_CLASS_NAME; @@ -72,10 +72,11 @@ import static org.springframework.util.ObjectUtils.isEmpty; * Dubbo Service Registration Auto-{@link Configuration}. * * @author Mercy + * @author theonefx */ @Configuration(proxyBeanMethods = false) @Import({ DubboServiceRegistrationEventPublishingAspect.class, - DubboBootstrapCommandLineRunner.class }) + DubboBootstrapStartCommandLineRunner.class }) @ConditionalOnProperty(value = "spring.cloud.service-registry.auto-registration.enabled", matchIfMissing = true) @AutoConfigureAfter(name = { EUREKA_CLIENT_AUTO_CONFIGURATION_CLASS_NAME, @@ -118,10 +119,9 @@ public class DubboServiceRegistrationAutoConfiguration { private Map, Set> registrations = new ConcurrentHashMap<>(); - @Order @EventListener(DubboBootstrapStartedEvent.class) - public void attachDubboMetadataAndRegistAgain(DubboBootstrapStartedEvent event) { - if (!event.getSource().isReady() || !event.getSource().isStarted()) { + public void onDubboBootstrapStarted(DubboBootstrapStartedEvent event) { + if (!event.getSource().isReady()) { return; } registrations.forEach( @@ -181,9 +181,9 @@ public class DubboServiceRegistrationAutoConfiguration { private ObjectProvider> serviceBeans; @EventListener(DubboBootstrapStartedEvent.class) - public void onServiceInstancePreRegistered(DubboBootstrapStartedEvent event) { - DubboBootstrap bootstrap = event.getSource(); - if (!bootstrap.isReady() || !bootstrap.isStarted()) { + public void onDubboBootstrapStarted(DubboBootstrapStartedEvent event) { + DubboBootstrapWrapper wrapper = event.getSource(); + if (!wrapper.isReady()) { return; } registrations.forEach( @@ -263,7 +263,7 @@ public class DubboServiceRegistrationAutoConfiguration { @EventListener(DubboBootstrapStartedEvent.class) public void attachURLsIntoMetadataBeforeReRegist( DubboBootstrapStartedEvent event) { - if (!event.getSource().isReady() || !event.getSource().isStarted()) { + if (!event.getSource().isReady()) { return; } registrations.entrySet().removeIf(entry -> { diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/DubboBootstrapCommandLineRunner.java b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboBootstrapStartCommandLineRunner.java similarity index 75% rename from spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/DubboBootstrapCommandLineRunner.java rename to spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboBootstrapStartCommandLineRunner.java index dc819d0e..9f47bb2e 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/DubboBootstrapCommandLineRunner.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboBootstrapStartCommandLineRunner.java @@ -14,10 +14,9 @@ * limitations under the License. */ -package com.alibaba.cloud.dubbo.metadata; +package com.alibaba.cloud.dubbo.bootstrap; -import com.alibaba.cloud.dubbo.metadata.event.DubboBootstrapStartedEvent; -import org.apache.dubbo.config.bootstrap.DubboBootstrap; +import com.alibaba.cloud.dubbo.bootstrap.event.DubboBootstrapStartedEvent; import org.springframework.boot.CommandLineRunner; import org.springframework.context.ApplicationEventPublisher; @@ -25,13 +24,13 @@ import org.springframework.context.ApplicationEventPublisherAware; import org.springframework.stereotype.Component; /** - * @see com.alibaba.cloud.dubbo.metadata.event.DubboBootstrapPreStartEvent - * @see com.alibaba.cloud.dubbo.metadata.event.DubboBootstrapStartedEvent + * publish Dubbo microsystem startup finish event. + * * @author theonefx */ @Component -public class DubboBootstrapCommandLineRunner +public class DubboBootstrapStartCommandLineRunner implements CommandLineRunner, ApplicationEventPublisherAware { private ApplicationEventPublisher applicationEventPublisher; @@ -45,7 +44,7 @@ public class DubboBootstrapCommandLineRunner @Override public void run(String... args) { applicationEventPublisher.publishEvent( - new DubboBootstrapStartedEvent(DubboBootstrap.getInstance())); + new DubboBootstrapStartedEvent(DubboBootstrapWrapper.getInstance())); } } diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/event/DubboBootstrapPreStartEvent.java b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboBootstrapWrapper.java similarity index 52% rename from spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/event/DubboBootstrapPreStartEvent.java rename to spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboBootstrapWrapper.java index b38f0c84..60fcaf6a 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/event/DubboBootstrapPreStartEvent.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboBootstrapWrapper.java @@ -14,22 +14,34 @@ * limitations under the License. */ -package com.alibaba.cloud.dubbo.metadata.event; +package com.alibaba.cloud.dubbo.bootstrap; -import org.springframework.context.ApplicationEvent; +import org.apache.dubbo.config.bootstrap.DubboBootstrap; /** + * Wrapper DubboBootstrap operation. + * * @author theonefx */ -public class DubboBootstrapPreStartEvent extends ApplicationEvent { +public final class DubboBootstrapWrapper { - /** - * Create a new {@code ApplicationEvent}. - * @param source the object on which the event initially occurred or with which the - * event is associated (never {@code null}) - */ - public DubboBootstrapPreStartEvent(Object source) { - super(source); + private DubboBootstrapWrapper() { + } + + private static final DubboBootstrapWrapper INSTANCE = new DubboBootstrapWrapper(); + + public static DubboBootstrapWrapper getInstance() { + return INSTANCE; + } + + public boolean isReady() { + return DubboBootstrap.getInstance().isStarted() + && DubboBootstrap.getInstance().isReady() + && DubboBootstrap.getInstance().isInitialized(); + } + + public DubboBootstrap getDubboBootstrap() { + return DubboBootstrap.getInstance(); } } diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/event/DubboBootstrapStartedEvent.java b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/bootstrap/event/DubboBootstrapStartedEvent.java similarity index 71% rename from spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/event/DubboBootstrapStartedEvent.java rename to spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/bootstrap/event/DubboBootstrapStartedEvent.java index c41996b8..3f14525c 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/event/DubboBootstrapStartedEvent.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/bootstrap/event/DubboBootstrapStartedEvent.java @@ -14,29 +14,31 @@ * limitations under the License. */ -package com.alibaba.cloud.dubbo.metadata.event; +package com.alibaba.cloud.dubbo.bootstrap.event; -import org.apache.dubbo.config.bootstrap.DubboBootstrap; +import com.alibaba.cloud.dubbo.bootstrap.DubboBootstrapWrapper; import org.springframework.context.ApplicationEvent; /** + * Dubbo microsytem start finish event, every thing is ready. + * * @author theonefx */ public class DubboBootstrapStartedEvent extends ApplicationEvent { /** - * Create a new {@code ApplicationEvent}. + * Create a new {@code DubboBootstrapStartedEvent}. * @param source the object on which the event initially occurred or with which the * event is associated (never {@code null}) */ - public DubboBootstrapStartedEvent(Object source) { + public DubboBootstrapStartedEvent(DubboBootstrapWrapper source) { super(source); } @Override - public DubboBootstrap getSource() { - return (DubboBootstrap) super.getSource(); + public DubboBootstrapWrapper getSource() { + return (DubboBootstrapWrapper) super.getSource(); } }