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", "")) +}