diff --git a/config/service_config.go b/config/service_config.go
index 32104f03ddba1c7a24a43a7989287a9b711565e7..1021306d0b8b36b1b3b748b4c34a0c321e6facba 100644
--- a/config/service_config.go
+++ b/config/service_config.go
@@ -40,10 +40,13 @@ import (
 	"github.com/apache/dubbo-go/common/constant"
 	"github.com/apache/dubbo-go/common/extension"
 	"github.com/apache/dubbo-go/common/logger"
+	"github.com/apache/dubbo-go/metadata/service"
 	"github.com/apache/dubbo-go/protocol"
 	"github.com/apache/dubbo-go/protocol/protocolwrapper"
 )
 
+var remoteMetadataService service.MetadataService
+
 // ServiceConfig is the configuration of the service provider
 type ServiceConfig struct {
 	context                     context.Context
@@ -223,6 +226,7 @@ func (c *ServiceConfig) Export() error {
 			}
 			c.exporters = append(c.exporters, exporter)
 		}
+		PublishServiceDefinition(ivkURL)
 	}
 	c.exported.Store(true)
 	return nil
@@ -332,3 +336,17 @@ func (c *ServiceConfig) GetExportedUrls() []*common.URL {
 	}
 	return nil
 }
+
+func PublishServiceDefinition(url *common.URL) {
+	if remoteMetadataService == nil {
+		var err error
+		if remoteMetadataService, err = extension.GetMetadataService("remote"); err != nil {
+			logger.Warnf("get remote metadataService fail. %v", err)
+			return
+		} else if remoteMetadataService == nil {
+			logger.Info("get remote metadataService will nil.")
+			return
+		}
+	}
+	remoteMetadataService.PublishServiceDefinition(url)
+}