diff --git a/config/config_loader.go b/config/config_loader.go
index b79c2e824988e2353b032d3ac1992740d0eca2b9..a4dc62ffbd0decbf83bc8b9f5ff9f0b17718277d 100644
--- a/config/config_loader.go
+++ b/config/config_loader.go
@@ -276,16 +276,10 @@ func GetApplicationConfig() *ApplicationConfig {
 
 // GetProviderConfig find the provider config
 // if not found, create new one
-// we use double-check to reduce race condition
-// In general, it will be locked 0 or 1 time.
-// So you don't need to worry about the race condition
 func GetProviderConfig() ProviderConfig {
 	if providerConfig == nil {
 		logger.Warnf("providerConfig is nil! we will try to create one")
-		configAccessMutex.Lock()
-		defer configAccessMutex.Unlock()
 		if providerConfig == nil {
-			logger.Warnf("creating empty provider config. You should see this log only once.")
 			return ProviderConfig{}
 		}
 	}
@@ -299,11 +293,7 @@ func GetProviderConfig() ProviderConfig {
 // So you don't need to worry about the race condition
 func GetConsumerConfig() ConsumerConfig {
 	if consumerConfig == nil {
-		logger.Warnf("consumerConfig is nil! we will try to create one")
-		configAccessMutex.Lock()
-		defer configAccessMutex.Unlock()
 		if consumerConfig == nil {
-			logger.Warnf("creating empty consumer config. You should see this log only once.")
 			return ConsumerConfig{}
 		}
 	}
diff --git a/metadata/report/delegate/delegate_report.go b/metadata/report/delegate/delegate_report.go
index 4bc781a7f54a19c789dd8a0f7bd2f13bf09fc353..1ab7e4e7c32c0e987a56069c5a5e25653423466a 100644
--- a/metadata/report/delegate/delegate_report.go
+++ b/metadata/report/delegate/delegate_report.go
@@ -130,7 +130,7 @@ func NewMetadataReport() (*MetadataReport, error) {
 		scheduler := gocron.NewScheduler(time.UTC)
 		_, err := scheduler.Every(1).Day().Do(
 			func() {
-				logger.Info("start to publish all metadata in metadata report %s.", url.String())
+				logger.Infof("start to publish all metadata in metadata report %s.", url.String())
 				bmr.allMetadataReportsLock.RLock()
 				bmr.doHandlerMetadataCollection(bmr.allMetadataReports)
 				bmr.allMetadataReportsLock.RUnlock()
diff --git a/registry/servicediscovery/service_discovery_registry.go b/registry/servicediscovery/service_discovery_registry.go
index 33d22e7339cb98552ec11c08b34c32ed444263c7..555513a444ce47015594d82e4182f3dc8031e71a 100644
--- a/registry/servicediscovery/service_discovery_registry.go
+++ b/registry/servicediscovery/service_discovery_registry.go
@@ -38,6 +38,7 @@ import (
 	"github.com/apache/dubbo-go/metadata/service"
 	"github.com/apache/dubbo-go/metadata/service/remote"
 	"github.com/apache/dubbo-go/registry"
+	registryCommon "github.com/apache/dubbo-go/registry/common"
 	"github.com/apache/dubbo-go/registry/servicediscovery/proxy"
 	"github.com/apache/dubbo-go/registry/servicediscovery/synthesizer"
 	"github.com/apache/dubbo-go/remoting"
@@ -113,7 +114,11 @@ func creatServiceDiscovery(url *common.URL) (registry.ServiceDiscovery, error) {
 	if !ok {
 		return nil, perrors.Errorf("The service discovery with name: %s is not found", sdcName)
 	}
-	return extension.GetServiceDiscovery(sdc.Protocol, sdcName)
+	originServiceDiscovery, err := extension.GetServiceDiscovery(sdc.Protocol, sdcName)
+	if err != nil {
+		return nil, perrors.WithMessage(err, "Create service discovery fialed")
+	}
+	return registryCommon.NewEventPublishingServiceDiscovery(originServiceDiscovery), nil
 }
 
 func parseServices(literalServices string) *gxset.HashSet {
@@ -155,6 +160,7 @@ func (s *serviceDiscoveryRegistry) Register(url common.URL) error {
 		return nil
 	}
 	ok, err := s.metaDataService.ExportURL(url)
+	s.metaDataService.PublishServiceDefinition(url)
 	if err != nil {
 		logger.Errorf("The URL[%s] registry catch error:%s!", url.String(), err.Error())
 		return err