diff --git a/common/constant/key.go b/common/constant/key.go
index a05ebbdbf051a7e09e2ddff331b8fcc7d8c8fd24..02db030a0a6cc6c16802979b8d331345634674fe 100644
--- a/common/constant/key.go
+++ b/common/constant/key.go
@@ -186,8 +186,6 @@ const (
 	ACL_TOKEN                   = "acl-token"
 	// default deregister critical server after
 	DEFAULT_DEREGISTER_TIME = "20s"
-	DEFAULT_WATCH_TIMEOUT   = 60 * 1000
-	WATCH_TIMEOUT           = "consul-watch-timeout"
 	DEREGISTER_AFTER        = "consul-deregister-critical-service-after"
 )
 
diff --git a/config/config_loader_test.go b/config/config_loader_test.go
index baf0c8fba3c40d92c9de0d00181237afe2388ea7..461e607c1e0ad2e9471770224c8eb6d5f3ee96f6 100644
--- a/config/config_loader_test.go
+++ b/config/config_loader_test.go
@@ -503,10 +503,6 @@ func (m *mockServiceDiscovery) String() string {
 	panic("implement me")
 }
 
-func (m *mockServiceDiscovery) Init(registryURL common.URL) error {
-	panic("implement me")
-}
-
 func (m *mockServiceDiscovery) Destroy() error {
 	panic("implement me")
 }
diff --git a/registry/consul/service_discovery.go b/registry/consul/service_discovery.go
index ae2233d590af83c9cb7a20ec7eb8af289de167c0..7dd0ade65a764fa2983acd23890e952a52d6147f 100644
--- a/registry/consul/service_discovery.go
+++ b/registry/consul/service_discovery.go
@@ -21,7 +21,6 @@ import (
 	"encoding/base64"
 	"fmt"
 	"strconv"
-	"strings"
 	"sync"
 	"time"
 )
@@ -35,7 +34,6 @@ import (
 )
 
 import (
-	"github.com/apache/dubbo-go/common"
 	"github.com/apache/dubbo-go/common/constant"
 	"github.com/apache/dubbo-go/common/extension"
 	"github.com/apache/dubbo-go/common/logger"
@@ -71,43 +69,37 @@ func newConsulServiceDiscovery(name string) (registry.ServiceDiscovery, error) {
 
 	descriptor := fmt.Sprintf("consul-service-discovery[%s]", remoteConfig.Address)
 
+	config := &consul.Config{Address: remoteConfig.Address, Token: remoteConfig.Params[constant.ACL_TOKEN]}
+	client, err := consul.NewClient(config)
+	if err != nil {
+		return nil, perrors.WithMessage(err, "create consul client failed.")
+	}
+
 	return &consulServiceDiscovery{
-		address:    remoteConfig.Address,
-		descriptor: descriptor,
+		address:                        remoteConfig.Address,
+		descriptor:                     descriptor,
+		checkPassInterval:              getCheckPassInterval(remoteConfig.Params),
+		Config:                         config,
+		tag:                            remoteConfig.Params[constant.QUERY_TAG],
+		consulClient:                   client,
+		deregisterCriticalServiceAfter: getDeregisterAfter(remoteConfig.Params),
 	}, nil
 }
 
 // consulServiceDiscovery is the implementation of service discovery based on consul.
 type consulServiceDiscovery struct {
-	group string
 	// descriptor is a short string about the basic information of this instance
 	descriptor string
 	// Consul client.
-	consulClient      *consul.Client
-	serviceUrl        common.URL
-	checkPassInterval int64
-	tag               string
-	tags              []string
-	address           string
-	ttl               sync.Map
+	consulClient                   *consul.Client
+	checkPassInterval              int64
+	tag                            string
+	address                        string
+	deregisterCriticalServiceAfter string
+	ttl                            sync.Map
 	*consul.Config
 }
 
-func (csd *consulServiceDiscovery) Init(registryURL common.URL) error {
-	csd.serviceUrl = registryURL
-	csd.checkPassInterval = registryURL.GetParamInt(constant.CHECK_PASS_INTERVAL, constant.DEFAULT_CHECK_PASS_INTERVAL)
-	csd.tag = registryURL.GetParam(constant.QUERY_TAG, "")
-	csd.tags = strings.Split(registryURL.GetParam("tags", ""), ",")
-	aclToken := registryURL.GetParam(constant.ACL_TOKEN, "")
-	csd.Config = &consul.Config{Address: csd.address, Token: aclToken}
-	client, err := consul.NewClient(csd.Config)
-	if err != nil {
-		return perrors.WithMessage(err, "create consul client failed.")
-	}
-	csd.consulClient = client
-	return nil
-}
-
 func (csd *consulServiceDiscovery) String() string {
 	return csd.descriptor
 }
@@ -240,9 +232,8 @@ func decodeConsulMetadata(metadata map[string]string) map[string]string {
 }
 
 func (csd *consulServiceDiscovery) GetInstances(serviceName string) []registry.ServiceInstance {
-	waitTime := csd.serviceUrl.GetParamInt(constant.WATCH_TIMEOUT, constant.DEFAULT_WATCH_TIMEOUT) / 1000
 	instances, _, err := csd.consulClient.Health().Service(serviceName, csd.tag, true, &consul.QueryOptions{
-		WaitTime: time.Duration(waitTime),
+		WaitTime: time.Duration(csd.checkPassInterval),
 	})
 	if err != nil {
 		logger.Errorf("get instances for service %s,error: %v", serviceName, err)
@@ -411,10 +402,32 @@ func (csd *consulServiceDiscovery) buildCheck(instance registry.ServiceInstance)
 	return consul.AgentServiceCheck{
 		//CheckID:                        buildID(instance),
 		TTL:                            strconv.FormatInt(csd.checkPassInterval/1000, 10) + "s",
-		DeregisterCriticalServiceAfter: deregister,
+		DeregisterCriticalServiceAfter: csd.deregisterCriticalServiceAfter,
+	}
+}
+
+// nolint
+func getCheckPassInterval(params map[string]string) int64 {
+	checkPassIntervalStr, ok := params[constant.CHECK_PASS_INTERVAL]
+	if !ok {
+		return constant.DEFAULT_CHECK_PASS_INTERVAL
+	}
+	checkPassInterval, err := strconv.ParseInt(checkPassIntervalStr, 10, 64)
+	if err != nil {
+		logger.Warnf("consul service discovery remote config error:%s", checkPassIntervalStr)
+		return constant.DEFAULT_CHECK_PASS_INTERVAL
 	}
+	return checkPassInterval
 }
 
+// nolint
+func getDeregisterAfter(metadata map[string]string) string {
+	deregister, ok := metadata[constant.DEREGISTER_AFTER]
+	if !ok || len(deregister) == 0 {
+		deregister = constant.DEFAULT_DEREGISTER_TIME
+	}
+	return deregister
+}
 func buildID(instance registry.ServiceInstance) string {
 
 	id := fmt.Sprintf("id:%s,serviceName:%s,host:%s,port:%d", instance.GetId(), instance.GetServiceName(), instance.GetHost(), instance.GetPort())
diff --git a/registry/consul/service_discovery_test.go b/registry/consul/service_discovery_test.go
index f743869b90c9fbb2e895449d77b203f6b2940868..43d1cd17384be86255be5a913c90a984081c3b79 100644
--- a/registry/consul/service_discovery_test.go
+++ b/registry/consul/service_discovery_test.go
@@ -80,8 +80,7 @@ func TestConsulServiceDiscovery_newConsulServiceDiscovery(t *testing.T) {
 func TestConsulServiceDiscovery_Destroy(t *testing.T) {
 	prepareData()
 	serviceDiscovery, err := extension.GetServiceDiscovery(constant.CONSUL_KEY, testName)
-	_, registryUrl := prepareService()
-	serviceDiscovery.Init(registryUrl)
+	prepareService()
 	assert.Nil(t, err)
 	assert.NotNil(t, serviceDiscovery)
 	err = serviceDiscovery.Destroy()
@@ -103,15 +102,12 @@ func TestConsulServiceDiscovery_CRUD(t *testing.T) {
 	extension.SetAndInitGlobalDispatcher("mock")
 	rand.Seed(time.Now().Unix())
 
-	instance, registryUrl := prepareService()
+	instance, _ := prepareService()
 
 	// clean data
 	serviceDiscovery, err := extension.GetServiceDiscovery(constant.CONSUL_KEY, testName)
 	assert.Nil(t, err)
 
-	err = serviceDiscovery.Init(registryUrl)
-	assert.Nil(t, err)
-
 	err = serviceDiscovery.Unregister(instance)
 	assert.Nil(t, err)
 
diff --git a/registry/etcdv3/service_discovery.go b/registry/etcdv3/service_discovery.go
index 080a699f9b52bab16af2e76e771b71e39a17175d..dceaa99df8061c6f46baa52eb6f5cebe4477f120 100644
--- a/registry/etcdv3/service_discovery.go
+++ b/registry/etcdv3/service_discovery.go
@@ -31,7 +31,6 @@ import (
 )
 
 import (
-	"github.com/apache/dubbo-go/common"
 	"github.com/apache/dubbo-go/common/constant"
 	"github.com/apache/dubbo-go/common/extension"
 	"github.com/apache/dubbo-go/common/logger"
@@ -67,10 +66,6 @@ type etcdV3ServiceDiscovery struct {
 	childListenerMap map[string]*etcdv3.EventListener
 }
 
-func (e *etcdV3ServiceDiscovery) Init(registryURL common.URL) error {
-	return nil
-}
-
 // basic information of this instance
 func (e *etcdV3ServiceDiscovery) String() string {
 	return e.descriptor
diff --git a/registry/event/event_publishing_service_deiscovery_test.go b/registry/event/event_publishing_service_deiscovery_test.go
index 2b4bf05f1df8fb455afb031e21ae2c3c319e6cd4..54752c03c0de598226270b27c8d7d0f3621d07d1 100644
--- a/registry/event/event_publishing_service_deiscovery_test.go
+++ b/registry/event/event_publishing_service_deiscovery_test.go
@@ -30,7 +30,6 @@ import (
 )
 
 import (
-	"github.com/apache/dubbo-go/common"
 	"github.com/apache/dubbo-go/common/extension"
 	"github.com/apache/dubbo-go/common/observer"
 	dispatcher2 "github.com/apache/dubbo-go/common/observer/dispatcher"
@@ -117,10 +116,6 @@ func (tel *TestServiceInstancePreRegisteredEventListener) GetEventType() reflect
 type ServiceDiscoveryA struct {
 }
 
-func (msd *ServiceDiscoveryA) Init(registryURL common.URL) error {
-	return nil
-}
-
 // String return mockServiceDiscovery
 func (msd *ServiceDiscoveryA) String() string {
 	return "testServiceDiscovery"
diff --git a/registry/event/event_publishing_service_discovery.go b/registry/event/event_publishing_service_discovery.go
index 14ee18997f65507c6c69b2021ac3b8c43ea10c5e..3ee2f4a44946065cdf7489abc391df41f251d810 100644
--- a/registry/event/event_publishing_service_discovery.go
+++ b/registry/event/event_publishing_service_discovery.go
@@ -17,17 +17,12 @@
 
 package event
 
-import (
-	"sync"
-)
-
 import (
 	gxset "github.com/dubbogo/gost/container/set"
 	gxpage "github.com/dubbogo/gost/page"
 )
 
 import (
-	"github.com/apache/dubbo-go/common"
 	"github.com/apache/dubbo-go/common/extension"
 	"github.com/apache/dubbo-go/common/observer"
 	"github.com/apache/dubbo-go/config"
@@ -38,8 +33,7 @@ import (
 // EventPublishingServiceDiscovery will enhance Service Discovery
 // Publish some event about service discovery
 type EventPublishingServiceDiscovery struct {
-	serviceDiscovery         registry.ServiceDiscovery
-	serviceDiscoveryInitOnce sync.Once
+	serviceDiscovery registry.ServiceDiscovery
 }
 
 // NewEventPublishingServiceDiscovery is a constructor
@@ -54,14 +48,6 @@ func (epsd *EventPublishingServiceDiscovery) String() string {
 	return epsd.serviceDiscovery.String()
 }
 
-func (epsd *EventPublishingServiceDiscovery) Init(registryURL common.URL) error {
-	var err error
-	epsd.serviceDiscoveryInitOnce.Do(func() {
-		err = epsd.serviceDiscovery.Init(registryURL)
-	})
-	return err
-}
-
 // Destroy delegate function
 func (epsd *EventPublishingServiceDiscovery) Destroy() error {
 	f := func() error {
diff --git a/registry/nacos/service_discovery.go b/registry/nacos/service_discovery.go
index a112ebaad921dcdfd6071c9ebdaa0c2ea085a7bc..0e5ad8e6990856aeb0dfdde72f9c3f7fdae3e985 100644
--- a/registry/nacos/service_discovery.go
+++ b/registry/nacos/service_discovery.go
@@ -32,7 +32,6 @@ import (
 )
 
 import (
-	"github.com/apache/dubbo-go/common"
 	"github.com/apache/dubbo-go/common/constant"
 	"github.com/apache/dubbo-go/common/extension"
 	"github.com/apache/dubbo-go/common/logger"
@@ -65,10 +64,6 @@ type nacosServiceDiscovery struct {
 	registryInstances []registry.ServiceInstance
 }
 
-func (n *nacosServiceDiscovery) Init(registryURL common.URL) error {
-	return nil
-}
-
 // Destroy will close the service discovery.
 // Actually, it only marks the naming client as null and then return
 func (n *nacosServiceDiscovery) Destroy() error {
diff --git a/registry/service_discovery.go b/registry/service_discovery.go
index a4e9e2421428b77ced2c26d544c6d0a8468c570a..cb7a3c0182ff88995ab9dd6c920523225c3cb36c 100644
--- a/registry/service_discovery.go
+++ b/registry/service_discovery.go
@@ -26,10 +26,6 @@ import (
 	gxpage "github.com/dubbogo/gost/page"
 )
 
-import (
-	"github.com/apache/dubbo-go/common"
-)
-
 const DefaultPageSize = 100
 
 // ServiceDiscovery is the common operations of Service Discovery
@@ -38,12 +34,6 @@ type ServiceDiscovery interface {
 
 	// ----------------- lifecycle -------------------
 
-	/**
-	 * Initializes the  ServiceDiscovery
-	 *
-	 */
-	Init(registryURL common.URL) error
-
 	// Destroy will destroy the service discovery.
 	// If the discovery cannot be destroy, it will return an error.
 	Destroy() error
diff --git a/registry/servicediscovery/service_discovery_registry.go b/registry/servicediscovery/service_discovery_registry.go
index 9722fc8eca1c335e17f8037449320a8c32e17c6b..52006b2bb8b8518525daa1f3e42434a4a2ebc7a0 100644
--- a/registry/servicediscovery/service_discovery_registry.go
+++ b/registry/servicediscovery/service_discovery_registry.go
@@ -125,7 +125,6 @@ func creatServiceDiscovery(url *common.URL) (registry.ServiceDiscovery, error) {
 		return nil, perrors.WithMessage(err, "Create service discovery fialed")
 	}
 	serviceDiscovery := event.NewEventPublishingServiceDiscovery(originServiceDiscovery)
-	serviceDiscovery.Init(*url)
 	return serviceDiscovery, nil
 }