diff --git a/registry/directory/directory.go b/registry/directory/directory.go
index 9b143a19ebcddc143a117bb283d7ebf6f08952f6..43bdaceafef268992c7708aa6c4e999711cdaaf6 100644
--- a/registry/directory/directory.go
+++ b/registry/directory/directory.go
@@ -232,7 +232,13 @@ func (dir *registryDirectory) Destroy() {
 func mergeUrl(serviceUrl common.URL, referenceUrl *common.URL) common.URL {
 	mergedUrl := serviceUrl
 	var methodConfigMergeFcn = []func(method string){}
+	//iterator the referenceUrl if serviceUrl not have the key ,merge in
 
+	for k, v := range referenceUrl.Params {
+		if _, ok := mergedUrl.Params[k]; !ok {
+			mergedUrl.Params.Set(k, v[0])
+		}
+	}
 	//loadBalance strategy config
 	if v := referenceUrl.Params.Get(constant.LOADBALANCE_KEY); v != "" {
 		mergedUrl.Params.Set(constant.LOADBALANCE_KEY, v)
diff --git a/registry/directory/directory_test.go b/registry/directory/directory_test.go
index 521bd84f01eba1881528ee4ff91b02ff63412246..685e96a685bb3af2c6577d1ab24f1a87bef34a28 100644
--- a/registry/directory/directory_test.go
+++ b/registry/directory/directory_test.go
@@ -127,3 +127,19 @@ func normalRegistryDir() (*registryDirectory, *registry.MockRegistry) {
 	}
 	return registryDirectory, mockRegistry.(*registry.MockRegistry)
 }
+
+func TestMergeUrl(t *testing.T) {
+	referenceUrlParams := url.Values{}
+	referenceUrlParams.Set(constant.CLUSTER_KEY, "random")
+	referenceUrlParams.Set("test3", "1")
+	serviceUrlParams := url.Values{}
+	serviceUrlParams.Set("test2", "1")
+	serviceUrlParams.Set(constant.CLUSTER_KEY, "roundrobin")
+	referenceUrl, _ := common.NewURL(context.TODO(), "mock1://127.0.0.1:1111", common.WithParams(referenceUrlParams))
+	serviceUrl, _ := common.NewURL(context.TODO(), "mock2://127.0.0.1:20000", common.WithParams(serviceUrlParams))
+
+	mergedUrl := mergeUrl(serviceUrl, &referenceUrl)
+	assert.Equal(t, "random", mergedUrl.GetParam(constant.CLUSTER_KEY, ""))
+	assert.Equal(t, "1", mergedUrl.GetParam("test2", ""))
+	assert.Equal(t, "1", mergedUrl.GetParam("test3", ""))
+}