diff --git a/cluster/cluster_impl/failover_cluster_invoker.go b/cluster/cluster_impl/failover_cluster_invoker.go index d81986d02f4743a1f26b8b5597df089d369c174f..5bb2471e06c967159196d754fe04158ad3a96c6b 100644 --- a/cluster/cluster_impl/failover_cluster_invoker.go +++ b/cluster/cluster_impl/failover_cluster_invoker.go @@ -93,7 +93,7 @@ func (invoker *failoverClusterInvoker) Invoke(invocation protocol.Invocation) pr } } ip, _ := utils.GetLocalIP() - return &protocol.RPCResult{Err: perrors.Errorf("Failed to invoke the method %v in the service %v . Tried %v times of "+ + return &protocol.RPCResult{Err: perrors.Errorf("Failed to invoke the method %v in the service %v. Tried %v times of "+ "the providers %v (%v/%v)from the registry %v on the consumer %v using the dubbo version %v. Last error is %v.", methodName, invoker.GetUrl().Service(), retries, providers, len(providers), len(invokers), invoker.directory.GetUrl(), ip, version.Version, result.Error().Error(), )} diff --git a/cluster/directory/static_directory.go b/cluster/directory/static_directory.go index 57093c4ae680ce8a639af4ca23c6e74bcd3f66a7..3ac567b00e37fae3923753a7577121e7a341ae1f 100644 --- a/cluster/directory/static_directory.go +++ b/cluster/directory/static_directory.go @@ -25,8 +25,13 @@ type staticDirectory struct { } func NewStaticDirectory(invokers []protocol.Invoker) *staticDirectory { + var url common.URL + + if len(invokers) > 0 { + url = invokers[0].GetUrl() + } return &staticDirectory{ - BaseDirectory: NewBaseDirectory(&common.URL{}), + BaseDirectory: NewBaseDirectory(&url), invokers: invokers, } } diff --git a/common/url.go b/common/url.go index 66dfaed6c1f0b2dfc2cd626ca3030f38528a8704..9b0c6352ae781a4f6eacb36e3f727e2b7ac55232 100644 --- a/common/url.go +++ b/common/url.go @@ -248,7 +248,16 @@ func (c URL) Context() context.Context { } func (c URL) Service() string { - return strings.TrimPrefix(c.Path, "/") + service := strings.TrimPrefix(c.Path, "/") + if service != "" { + return service + } else if c.SubURL != nil { + service = strings.TrimPrefix(c.SubURL.Path, "/") + if service != "" { //if url.path is "" then return suburl's path, special for registry Url + return service + } + } + return "" } func (c URL) GetParam(s string, d string) string { var r string