You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by fa...@apache.org on 2020/07/26 08:28:54 UTC

[dubbo-go] 04/04: Mrg: merge develop

This is an automated email from the ASF dual-hosted git repository.

fangyc pushed a commit to branch refact-seri
in repository https://gitbox.apache.org/repos/asf/dubbo-go.git

commit 14564b90bdff5bd7c71710cf4b3d40b3bc2a89e1
Merge: 9b260cf 053aab5
Author: fangyincheng <fa...@sina.com>
AuthorDate: Sun Jul 26 16:26:13 2020 +0800

    Mrg: merge develop

 .gitignore                                         |  10 +-
 CHANGE.md                                          |  50 ++
 NOTICE                                             |   2 +-
 README.md                                          |  36 +-
 README_CN.md                                       |  35 +-
 before_ut.bat                                      |   5 +-
 before_ut.sh                                       |   9 +-
 cluster/cluster_impl/available_cluster.go          |   1 +
 cluster/cluster_impl/base_cluster_invoker_test.go  |  15 +-
 cluster/cluster_impl/broadcast_cluster.go          |   1 +
 cluster/cluster_impl/broadcast_cluster_invoker.go  |   1 +
 cluster/cluster_impl/failback_cluster.go           |   1 +
 cluster/cluster_impl/failback_cluster_invoker.go   |  52 +-
 cluster/cluster_impl/failfast_cluster.go           |   1 +
 cluster/cluster_impl/failfast_cluster_invoker.go   |   1 +
 cluster/cluster_impl/failover_cluster.go           |   1 +
 cluster/cluster_impl/failover_cluster_invoker.go   |   8 +-
 cluster/cluster_impl/failover_cluster_test.go      |  15 +
 cluster/cluster_impl/failsafe_cluster.go           |   1 +
 cluster/cluster_impl/failsafe_cluster_invoker.go   |   1 +
 cluster/cluster_impl/forking_cluster.go            |   1 +
 cluster/cluster_impl/forking_cluster_invoker.go    |   2 +-
 cluster/cluster_impl/mock_cluster.go               |   1 +
 cluster/cluster_impl/registry_aware_cluster.go     |   1 +
 .../cluster_impl/registry_aware_cluster_invoker.go |   1 +
 cluster/directory/base_directory.go                |  14 -
 cluster/loadbalance/consistent_hash.go             |   5 +-
 cluster/loadbalance/consistent_hash_test.go        |  33 +-
 cluster/loadbalance/least_active.go                |   1 +
 cluster/loadbalance/random_test.go                 |  22 +-
 cluster/loadbalance/round_robin.go                 |   7 +-
 cluster/router/chain/chain_test.go                 |  88 +--
 cluster/router/condition/app_router_test.go        |  45 +-
 cluster/router/condition/factory_test.go           | 113 ++--
 cluster/router/condition/file.go                   |   8 +-
 cluster/router/condition/router.go                 |   4 +-
 .../healthcheck/default_health_check_test.go       |  65 +-
 cluster/router/healthcheck/factory_test.go         |   9 +
 .../router/healthcheck/health_check_route_test.go  |  40 +-
 cluster/router/tag/factory_test.go                 |  10 +-
 cluster/router/tag/file_test.go                    |  18 +-
 cluster/router/tag/tag_router.go                   |   8 +
 cluster/router/tag/tag_router_test.go              |  59 +-
 common/constant/default.go                         |   9 +
 common/constant/env.go                             |   1 +
 common/constant/key.go                             |  37 +-
 common/extension/event_dispatcher.go               |  77 +++
 common/extension/event_dispatcher_test.go          | 111 ++++
 common/extension/metadata_report_factory.go        |   8 +-
 common/extension/metadata_service.go               |  47 ++
 common/extension/metadata_service_proxy_factory.go |  48 ++
 common/extension/service_discovery.go              |  19 +-
 ...discovery.go => service_instance_customizer.go} |  39 +-
 ...ery.go => service_instance_selector_factory.go} |  25 +-
 .../extension/service_name_mapping.go              |  16 +-
 .../observer/dispatcher/direct_event_dispatcher.go |  69 ++
 .../dispatcher/direct_event_dispatcher_test.go     |  77 +++
 .../observer/dispatcher/mock_event_dispatcher.go   |  58 ++
 common/observer/event.go                           |  68 ++
 .../observer/event_dispatcher.go                   |  19 +-
 {registry => common/observer}/event_listener.go    |  17 +-
 common/observer/listenable.go                      | 142 ++++
 .../observer/listenable_test.go                    |  52 +-
 common/proxy/proxy.go                              |  18 +-
 common/rpc_service.go                              |  17 +-
 common/url.go                                      |  27 +-
 config/application_config.go                       |   3 +-
 config/base_config.go                              | 142 ++--
 config/base_config_test.go                         | 424 ++++--------
 config/config_loader.go                            | 111 +++-
 config/config_loader_test.go                       |  77 ++-
 config/config_utils.go                             |  54 +-
 config/config_utils_test.go                        |  20 +
 config/consumer_config.go                          |   8 +-
 config/graceful_shutdown_config_test.go            |   2 +-
 config/graceful_shutdown_signal_darwin.go          |   2 +-
 config/graceful_shutdown_signal_linux.go           |   2 +-
 config/graceful_shutdown_signal_windows.go         |   2 +-
 config/instance/metadata_report.go                 |  29 +-
 config/instance/metadata_report_test.go            |  85 +++
 config/metadata_report_config.go                   |  39 +-
 config/metadata_report_config_test.go              |   7 +-
 config/method_config.go                            |   4 +-
 config/provider_config.go                          |  37 +-
 config/reference_config.go                         |   6 +-
 config/reference_config_test.go                    |  67 +-
 config/registry_config_test.go                     |   4 +-
 config/remote_config.go                            |  58 ++
 ...{config_utils_test.go => remote_config_test.go} |  25 +-
 config/router_config.go                            |  12 +-
 config/router_config_test.go                       |   5 +-
 config/service_config.go                           |  72 ++-
 config/service_config_test.go                      | 144 ++---
 ...g_utils_test.go => service_discovery_config.go} |  33 +-
 config_center/apollo/factory.go                    |   1 +
 config_center/apollo/listener.go                   |   2 +-
 config_center/mock_dynamic_config.go               |   8 +-
 config_center/nacos/client.go                      |  95 ++-
 config_center/nacos/client_test.go                 |   4 +-
 config_center/nacos/impl.go                        |  30 +-
 config_center/nacos/impl_test.go                   |  30 +-
 config_center/nacos/listener.go                    |   4 +-
 config_center/parser/configuration_parser.go       |  17 +-
 config_center/zookeeper/listener.go                |   2 +-
 filter/filter.go                                   |   2 +-
 filter/filter_impl/access_log_filter.go            |  12 +-
 filter/filter_impl/access_log_filter_test.go       |   4 +-
 filter/filter_impl/active_filter_test.go           |   4 +-
 filter/filter_impl/echo_filter.go                  |   2 +-
 filter/filter_impl/echo_filter_test.go             |   2 +-
 filter/filter_impl/execute_limit_filter.go         |   2 +-
 filter/filter_impl/execute_limit_filter_test.go    |   6 +-
 filter/filter_impl/generic_filter.go               |   2 +-
 filter/filter_impl/generic_filter_test.go          |   6 +-
 filter/filter_impl/generic_service_filter.go       |  12 +-
 filter/filter_impl/generic_service_filter_test.go  |  10 +-
 .../filter_impl/graceful_shutdown_filter_test.go   |   2 +-
 filter/filter_impl/hystrix_filter.go               |  16 +-
 filter/filter_impl/hystrix_filter_test.go          |  14 +-
 filter/filter_impl/metrics_filter_test.go          |   2 +-
 .../{token_filter.go => seata_filter.go}           |  44 +-
 .../{echo_filter_test.go => seata_filter_test.go}  |  28 +-
 filter/filter_impl/token_filter.go                 |   4 +-
 filter/filter_impl/token_filter_test.go            |   8 +-
 .../tps/tps_limit_fix_window_strategy.go           |   2 +-
 .../tps/tps_limit_fix_window_strategy_test.go      |   2 +-
 .../tps/tps_limit_sliding_window_strategy_test.go  |   2 +-
 filter/filter_impl/tps/tps_limit_strategy_mock.go  |   3 +
 ...s_limit_thread_safe_fix_window_strategy_test.go |   2 +-
 .../tps/tps_limiter_method_service_test.go         |   8 +-
 filter/filter_impl/tps_limit_filter_test.go        |   6 +-
 filter/filter_impl/tracing_filter_test.go          |   7 +-
 go.mod                                             |  22 +-
 go.sum                                             |  51 +-
 metadata/definition/definition.go                  |  96 +++
 metadata/definition/definition_test.go             |  52 ++
 metadata/{report_factory.go => definition/mock.go} |  30 +-
 metadata/identifier/base_metadata_identifier.go    |  42 +-
 .../identifier/base_metadata_identifier_test.go    |  26 +-
 metadata/identifier/metadata_identifier.go         |  10 +-
 .../identifier/metadata_identifier_test.go         |  29 +-
 metadata/identifier/service_metadata_identifier.go |  28 +-
 .../identifier/service_metadata_identifier_test.go |  30 +-
 .../identifier/subscribe_metadata_identifier.go    |  12 +-
 .../subscribe_metadata_identifier_test.go          |  31 +-
 .../dynamic/service_name_mapping.go                |  31 +-
 .../dynamic/service_name_mapping_test.go           |   4 +-
 .../memory/service_name_mapping.go                 |  25 +-
 metadata/{ => mapping}/service_name_mapping.go     |   2 +-
 metadata/report.go                                 |  35 -
 metadata/report/consul/report.go                   | 125 ++++
 metadata/report/consul/report_test.go              | 165 +++++
 metadata/report/delegate/delegate_report.go        | 287 +++++++++
 metadata/report/delegate/delegate_report_test.go   | 123 ++++
 metadata/report/etcd/report.go                     | 142 ++++
 metadata/report/etcd/report_test.go                | 133 ++++
 metadata/{ => report/factory}/report_factory.go    |  13 +-
 metadata/report/nacos/report.go                    | 187 ++++++
 metadata/report/nacos/report_test.go               | 116 ++++
 metadata/report/report.go                          |  60 ++
 metadata/report/zookeeper/report.go                | 133 ++++
 metadata/report/zookeeper/report_test.go           | 166 +++++
 metadata/service.go                                |  40 --
 metadata/service/exporter/configurable/exporter.go | 106 +++
 .../service/exporter/configurable/exporter_test.go | 122 ++++
 metadata/{ => service/exporter}/exporter.go        |   9 +-
 .../inmemory/metadata_service_proxy_factory.go     |  97 +++
 .../metadata_service_proxy_factory_test.go         | 100 +++
 metadata/service/inmemory/service.go               | 249 +++++++
 metadata/service/inmemory/service_proxy.go         | 139 ++++
 metadata/service/inmemory/service_proxy_test.go    |  82 +++
 metadata/service/inmemory/service_test.go          |  95 +++
 .../remote/metadata_service_proxy_factory.go}      |  16 +-
 metadata/service/remote/service.go                 | 208 ++++++
 metadata/service/remote/service_proxy.go           | 162 +++++
 metadata/service/remote/service_proxy_test.go      | 135 ++++
 metadata/service/remote/service_test.go            | 143 +++++
 metadata/service/service.go                        | 135 ++++
 protocol/dubbo/dubbo_invoker_test.go               |   2 +-
 protocol/dubbo/dubbo_protocol_test.go              |  10 +-
 protocol/grpc/common_test.go                       |   2 +-
 protocol/grpc/grpc_exporter.go                     |   2 +-
 protocol/grpc/grpc_invoker.go                      |  12 +-
 protocol/grpc/grpc_invoker_test.go                 |  10 +-
 protocol/grpc/grpc_protocol_test.go                |   8 +-
 protocol/invocation/rpcinvocation.go               |   2 +
 protocol/jsonrpc/http.go                           |   2 +-
 protocol/jsonrpc/http_test.go                      |  16 +-
 protocol/jsonrpc/json.go                           |  14 +-
 protocol/jsonrpc/json_test.go                      |   8 +-
 protocol/jsonrpc/jsonrpc_invoker_test.go           |   2 +-
 protocol/jsonrpc/jsonrpc_protocol_test.go          |   4 +-
 protocol/protocolwrapper/mock_protocol_filter.go   |   2 +-
 .../protocolwrapper/protocol_filter_wrapper.go     |  12 +-
 .../protocol_filter_wrapper_test.go                |   4 +-
 protocol/rest/client/client_impl/resty_client.go   |   2 +-
 .../rest/config/reader/rest_config_reader_test.go  |   4 +-
 protocol/rest/config/rest_config.go                |  28 +-
 protocol/rest/rest_exporter.go                     |   3 +
 protocol/rest/rest_invoker.go                      |   5 +
 protocol/rest/rest_invoker_test.go                 |  16 +-
 protocol/rest/rest_protocol.go                     |   9 +
 protocol/rest/rest_protocol_test.go                |  16 +-
 protocol/rpc_status.go                             |   4 +-
 protocol/rpc_status_test.go                        |  20 +-
 registry/base_configuration_listener.go            |   7 +-
 registry/base_registry.go                          | 136 +++-
 registry/consul/registry.go                        |  22 +-
 registry/consul/registry_test.go                   |   2 +-
 registry/consul/utils_test.go                      |  55 +-
 registry/directory/directory.go                    |  16 +-
 registry/directory/directory_test.go               |   8 +-
 registry/etcdv3/registry.go                        |   9 +
 registry/etcdv3/service_discovery.go               | 322 ++++++++++
 registry/etcdv3/service_discovery_test.go          |  80 +++
 registry/event.go                                  |  47 +-
 .../customizable_service_instance_listener.go      |  73 +++
 .../customizable_service_instance_listener_test.go |  73 ++-
 .../event_publishing_service_deiscovery_test.go    | 190 ++++++
 .../event/event_publishing_service_discovery.go    | 157 +++++
 .../event/log_event_listener.go                    |  43 +-
 .../event/log_event_listener_test.go               |  14 +-
 .../metadata_service_url_params_customizer.go      | 105 +++
 .../metadata_service_url_params_customizer_test.go | 124 ++++
 .../event/protocol_ports_metadata_customizer.go    | 106 +++
 .../event/service_config_exported_event.go         |  24 +-
 registry/event/service_discovery_event.go          | 103 +++
 registry/event/service_instance_event.go           |  87 +++
 registry/event/service_name_mapping_listener.go    |  89 +++
 registry/event/service_revision_customizer.go      | 137 ++++
 registry/event_listener.go                         |  45 +-
 registry/kubernetes/registry.go                    |   9 +
 registry/mock_registry.go                          |  13 +-
 registry/nacos/registry.go                         |  99 ++-
 registry/nacos/service_discovery.go                |  89 ++-
 registry/nacos/service_discovery_test.go           |  81 ++-
 registry/protocol/protocol_test.go                 |   9 +-
 registry/registry.go                               |  17 +-
 registry/service_discovery.go                      |   2 +
 registry/service_instance.go                       |  18 +-
 .../random/random_service_instance_selector.go     |  36 +-
 .../random_service_instance_selector_test.go       |  57 +-
 .../instance/service_instance_selector.go          |  11 +-
 .../servicediscovery/service_discovery_registry.go | 713 +++++++++++++++++++++
 .../service_discovery_registry_test.go             | 246 +++++++
 .../rest/rest_subscribed_urls_synthesizer.go       |  65 ++
 .../rest/rest_subscribed_urls_synthesizer_test.go  |  75 +++
 .../synthesizer/subscribed_urls_synthesizer.go     |  15 +-
 .../subscribed_urls_synthesizer_factory.go         |  21 +-
 registry/zookeeper/listener.go                     |  43 +-
 registry/zookeeper/registry.go                     |  67 +-
 registry/zookeeper/registry_test.go                |  58 ++
 registry/zookeeper/service_discovery.go            | 351 ++++++++++
 registry/zookeeper/service_discovery_test.go       | 197 ++++++
 .../consul/test_agent.go                           |  50 +-
 .../consul/test_agent_test.go                      |  14 +-
 remoting/etcdv3/client.go                          |  71 +-
 remoting/etcdv3/client_test.go                     |   8 +-
 remoting/etcdv3/facade.go                          |   6 +-
 remoting/etcdv3/listener.go                        |   6 +-
 remoting/kubernetes/client_test.go                 |  15 +-
 remoting/kubernetes/facade_test.go                 |   1 +
 remoting/listener.go                               |   2 +
 .../base_registry.go => remoting/nacos/builder.go  |  66 +-
 .../nacos/builder_test.go                          |  29 +-
 remoting/zookeeper/client.go                       | 194 +++---
 remoting/zookeeper/client_test.go                  |  32 +-
 .../curator_discovery/service_discovery.go         | 279 ++++++++
 .../curator_discovery/service_instance.go          |  20 +-
 remoting/zookeeper/facade.go                       |  16 +-
 remoting/zookeeper/facade_test.go                  |   2 +-
 remoting/zookeeper/listener.go                     |  55 +-
 remoting/zookeeper/listener_test.go                |  10 +-
 273 files changed, 11086 insertions(+), 2102 deletions(-)

diff --cc .gitignore
index 568e9f2,fabff68..8158b49
--- a/.gitignore
+++ b/.gitignore
@@@ -30,5 -27,10 +27,12 @@@ logs
  remoting/zookeeper/zookeeper-4unittest/
  config_center/zookeeper/zookeeper-4unittest/
  registry/zookeeper/zookeeper-4unittest/
+ metadata/report/zookeeper/zookeeper-4unittest/
  registry/consul/agent*
++metadata/report/consul/agent*
++remoting/consul/agent*
  config_center/apollo/mockDubbog.properties.json
+ 
+ # vim stuff
+ *~
+ .*.sw?
diff --cc common/constant/key.go
index 06b37cf,cd23dd0..c3fe0e7
--- a/common/constant/key.go
+++ b/common/constant/key.go
@@@ -22,27 -22,30 +22,31 @@@ const 
  )
  
  const (
 -	PORT_KEY               = "port"
 -	GROUP_KEY              = "group"
 -	VERSION_KEY            = "version"
 -	INTERFACE_KEY          = "interface"
 -	PATH_KEY               = "path"
 -	PROTOCOL_KEY           = "protocol"
 -	SERVICE_KEY            = "service"
 -	METHODS_KEY            = "methods"
 -	TIMEOUT_KEY            = "timeout"
 -	CATEGORY_KEY           = "category"
 -	CHECK_KEY              = "check"
 -	ENABLED_KEY            = "enabled"
 -	SIDE_KEY               = "side"
 -	OVERRIDE_PROVIDERS_KEY = "providerAddresses"
 -	BEAN_NAME_KEY          = "bean.name"
 -	GENERIC_KEY            = "generic"
 -	CLASSIFIER_KEY         = "classifier"
 -	TOKEN_KEY              = "token"
 -	LOCAL_ADDR             = "local-addr"
 -	REMOTE_ADDR            = "remote-addr"
 -	PATH_SEPARATOR         = "/"
 -	DUBBO_KEY              = "dubbo"
 -	RELEASE_KEY            = "release"
 -	ANYHOST_KEY            = "anyhost"
 +	GROUP_KEY                = "group"
 +	VERSION_KEY              = "version"
 +	INTERFACE_KEY            = "interface"
 +	PATH_KEY                 = "path"
 +	SERVICE_KEY              = "service"
 +	METHODS_KEY              = "methods"
 +	TIMEOUT_KEY              = "timeout"
 +	CATEGORY_KEY             = "category"
 +	CHECK_KEY                = "check"
 +	ENABLED_KEY              = "enabled"
 +	SIDE_KEY                 = "side"
 +	OVERRIDE_PROVIDERS_KEY   = "providerAddresses"
 +	BEAN_NAME_KEY            = "bean.name"
 +	GENERIC_KEY              = "generic"
 +	CLASSIFIER_KEY           = "classifier"
 +	TOKEN_KEY                = "token"
 +	LOCAL_ADDR               = "local-addr"
 +	REMOTE_ADDR              = "remote-addr"
 +	DEFAULT_REMOTING_TIMEOUT = 3000
 +	RELEASE_KEY              = "release"
 +	ANYHOST_KEY              = "anyhost"
++	PORT_KEY                 = "port"
++	PROTOCOL_KEY             = "protocol"
++	PATH_SEPARATOR           = "/"
++	DUBBO_KEY                = "dubbo"
  )
  
  const (
@@@ -77,7 -80,11 +81,12 @@@ const 
  	EXECUTE_REJECTED_EXECUTION_HANDLER_KEY = "execute.limit.rejected.handler"
  	PROVIDER_SHUTDOWN_FILTER               = "pshutdown"
  	CONSUMER_SHUTDOWN_FILTER               = "cshutdown"
 +	SERIALIZATION_KEY                      = "serialization"
+ 	PID_KEY                                = "pid"
+ 	SYNC_REPORT_KEY                        = "sync.report"
+ 	RETRY_PERIOD_KEY                       = "retry.period"
+ 	RETRY_TIMES_KEY                        = "retry.times"
+ 	CYCLE_REPORT_KEY                       = "cycle.report"
  )
  
  const (
diff --cc common/url.go
index 5a3e69f,807d0ed..7c2c39c
--- a/common/url.go
+++ b/common/url.go
@@@ -656,28 -658,21 +662,47 @@@ func mergeNormalParam(mergedUrl *URL, r
  	return methodConfigMergeFcn
  }
  
 +// doesn't encode url reserve character, url.QueryEscape will do this work
 +// reference: https://github.com/golang/go.git, src/net/url/url.go, Encode method
 +func ParamsUnescapeEncode(params url.Values) string {
 +	if params == nil {
 +		return ""
 +	}
 +	var buf strings.Builder
 +	keys := make([]string, len(params))
 +	for k := range params {
 +		keys = append(keys, k)
 +	}
 +	sort.Strings(keys)
 +	for _, k := range keys {
 +		vs := params[k]
 +		for _, v := range vs {
 +			if buf.Len() > 0 {
 +				buf.WriteByte('&')
 +			}
 +			buf.WriteString(k)
 +			buf.WriteByte('=')
 +			buf.WriteString(v)
 +		}
 +	}
 +	return buf.String()
 +}
++
+ // URLSlice will be used to sort URL instance
+ // Instances will be order by URL.String()
+ type URLSlice []URL
+ 
+ // nolint
+ func (s URLSlice) Len() int {
+ 	return len(s)
+ }
+ 
+ // nolint
+ func (s URLSlice) Less(i, j int) bool {
+ 	return s[i].String() < s[j].String()
+ }
+ 
+ // nolint
+ func (s URLSlice) Swap(i, j int) {
+ 	s[i], s[j] = s[j], s[i]
+ }
diff --cc go.mod
index 7e4b8d9,a16b906..44f73d3
--- a/go.mod
+++ b/go.mod
@@@ -29,19 -26,14 +26,15 @@@ require 
  	github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645
  	github.com/hashicorp/consul v1.5.3
  	github.com/hashicorp/consul/api v1.1.0
- 	github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869 // indirect
+ 	github.com/hashicorp/vault v0.10.3
  	github.com/jinzhu/copier v0.0.0-20190625015134-976e0346caa8
- 	github.com/jonboulle/clockwork v0.1.0 // indirect
  	github.com/juju/loggo v0.0.0-20190526231331-6e530bcce5d8 // indirect
  	github.com/juju/testing v0.0.0-20191001232224-ce9dec17d28b // indirect
- 	github.com/lestrrat/go-envload v0.0.0-20180220120943-6ed08b54a570 // indirect
- 	github.com/lestrrat/go-file-rotatelogs v0.0.0-20180223000712-d3151e2a480f // indirect
- 	github.com/lestrrat/go-strftime v0.0.0-20180220042222-ba3bf9c1d042 // indirect
  	github.com/magiconair/properties v1.8.1
 +	github.com/matttproud/golang_protobuf_extensions v1.0.1
  	github.com/mitchellh/mapstructure v1.1.2
  	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd
- 	github.com/nacos-group/nacos-sdk-go v0.0.0-20191128082542-fe1b325b125c
+ 	github.com/nacos-group/nacos-sdk-go v0.3.3-0.20200617023039-50c7537d6a5f
  	github.com/opentracing/opentracing-go v1.1.0
  	github.com/pkg/errors v0.9.1
  	github.com/prometheus/client_golang v1.1.0
diff --cc metadata/service/exporter/configurable/exporter_test.go
index 0000000,9fdbd76..b85e0ac
mode 000000,100644..100644
--- a/metadata/service/exporter/configurable/exporter_test.go
+++ b/metadata/service/exporter/configurable/exporter_test.go
@@@ -1,0 -1,122 +1,122 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *     http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ 
+ package configurable
+ 
+ import (
++	"github.com/apache/dubbo-go/remoting/getty"
+ 	"testing"
+ )
+ 
+ import (
+ 	"github.com/stretchr/testify/assert"
+ )
+ 
+ import (
+ 	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
+ 	"github.com/apache/dubbo-go/config"
+ 	_ "github.com/apache/dubbo-go/filter/filter_impl"
+ 	"github.com/apache/dubbo-go/metadata/service/inmemory"
 -	"github.com/apache/dubbo-go/protocol/dubbo"
+ 	_ "github.com/apache/dubbo-go/protocol/dubbo"
+ )
+ 
+ func TestConfigurableExporter(t *testing.T) {
 -	dubbo.SetServerConfig(dubbo.ServerConfig{
++	getty.SetServerConfig(getty.ServerConfig{
+ 		SessionNumber:  700,
+ 		SessionTimeout: "20s",
 -		GettySessionParam: dubbo.GettySessionParam{
++		GettySessionParam: getty.GettySessionParam{
+ 			CompressEncoding: false,
+ 			TcpNoDelay:       true,
+ 			TcpKeepAlive:     true,
+ 			KeepAlivePeriod:  "120s",
+ 			TcpRBufSize:      262144,
+ 			TcpWBufSize:      65536,
+ 			PkgWQSize:        512,
+ 			TcpReadTimeout:   "1s",
+ 			TcpWriteTimeout:  "5s",
+ 			WaitTimeout:      "1s",
+ 			MaxMsgLen:        10240000000,
+ 			SessionName:      "server",
+ 		}})
+ 	mockInitProviderWithSingleRegistry()
+ 	metadataService, _ := inmemory.NewMetadataService()
+ 	exported := NewMetadataServiceExporter(metadataService)
+ 	assert.Equal(t, false, exported.IsExported())
+ 	assert.NoError(t, exported.Export())
+ 	assert.Equal(t, true, exported.IsExported())
+ 	assert.Regexp(t, "dubbo://:20000/MetadataService*", exported.GetExportedURLs()[0].String())
+ 	exported.Unexport()
+ 	assert.Equal(t, false, exported.IsExported())
+ }
+ 
+ // mockInitProviderWithSingleRegistry will init a mocked providerConfig
+ func mockInitProviderWithSingleRegistry() {
+ 	providerConfig := &config.ProviderConfig{
+ 
+ 		BaseConfig: config.BaseConfig{
+ 			ApplicationConfig: &config.ApplicationConfig{
+ 				Organization: "dubbo_org",
+ 				Name:         "dubbo",
+ 				Module:       "module",
+ 				Version:      "1.0.0",
+ 				Owner:        "dubbo",
+ 				Environment:  "test"},
+ 		},
+ 
+ 		Registry: &config.RegistryConfig{
+ 			Address:  "mock://127.0.0.1:2181",
+ 			Username: "user1",
+ 			Password: "pwd1",
+ 		},
+ 		Registries: map[string]*config.RegistryConfig{},
+ 
+ 		Services: map[string]*config.ServiceConfig{
+ 			"MockService": {
+ 				InterfaceName: "com.MockService",
+ 				Protocol:      "mock",
+ 				Cluster:       "failover",
+ 				Loadbalance:   "random",
+ 				Retries:       "3",
+ 				Group:         "huadong_idc",
+ 				Version:       "1.0.0",
+ 				Methods: []*config.MethodConfig{
+ 					{
+ 						Name:        "GetUser",
+ 						Retries:     "2",
+ 						LoadBalance: "random",
+ 						Weight:      200,
+ 					},
+ 					{
+ 						Name:        "GetUser1",
+ 						Retries:     "2",
+ 						LoadBalance: "random",
+ 						Weight:      200,
+ 					},
+ 				},
+ 			},
+ 		},
+ 		Protocols: map[string]*config.ProtocolConfig{
+ 			"mock": {
+ 				Name: "mock",
+ 				Ip:   "127.0.0.1",
+ 				Port: "20000",
+ 			},
+ 		},
+ 	}
+ 	providerConfig.Services["MockService"].InitExported()
+ 	config.SetProviderConfig(*providerConfig)
+ }
diff --cc protocol/dubbo/dubbo_invoker_test.go
index 9585461,c0640d5..3c68b63
--- a/protocol/dubbo/dubbo_invoker_test.go
+++ b/protocol/dubbo/dubbo_invoker_test.go
@@@ -35,17 -32,21 +35,17 @@@ import 
  import (
  	"github.com/apache/dubbo-go/common"
  	"github.com/apache/dubbo-go/common/constant"
 +	"github.com/apache/dubbo-go/common/proxy/proxy_factory"
 +	"github.com/apache/dubbo-go/protocol"
  	"github.com/apache/dubbo-go/protocol/invocation"
 +	"github.com/apache/dubbo-go/remoting"
 +	"github.com/apache/dubbo-go/remoting/getty"
  )
  
- func TestDubboInvoker_Invoke(t *testing.T) {
+ func TestDubboInvokerInvoke(t *testing.T) {
  	proto, url := InitTest(t)
  
 -	c := &Client{
 -		pendingResponses: new(sync.Map),
 -		conf:             *clientConf,
 -		opts: Options{
 -			ConnectTimeout: 3 * time.Second,
 -			RequestTimeout: 6 * time.Second,
 -		},
 -	}
 -	c.pool = newGettyRPCClientConnPool(c, clientConf.PoolSize, time.Duration(int(time.Second)*clientConf.PoolTTL))
 +	c := getExchangeClient(url)
  
  	invoker := NewDubboInvoker(url, c)
  	user := &User{}
diff --cc protocol/dubbo/dubbo_protocol_test.go
index 07b890f,6f3892b..352d980
--- a/protocol/dubbo/dubbo_protocol_test.go
+++ b/protocol/dubbo/dubbo_protocol_test.go
@@@ -81,20 -36,23 +81,12 @@@ func TestDubboProtocol_Export(t *testin
  		"application=BDTService&category=providers&default.timeout=10000&dubbo=dubbo-provider-golang-1.0.0&" +
  		"environment=dev&interface=com.ikurento.user.UserProvider&ip=192.168.56.1&methods=GetUser%2C&" +
  		"module=dubbogo+user-info+server&org=ikurento.com&owner=ZX&pid=1447&revision=0.0.1&" +
 -		"side=provider&timeout=3000&timestamp=1556509797245"
 -)
 -
 -func TestDubboProtocolExport(t *testing.T) {
 -	// Export
 -	proto := GetProtocol()
 -	srvConf = &ServerConfig{}
 -	url, err := common.NewURL(mockCommonUrl)
 -	assert.NoError(t, err)
 -	exporter := proto.Export(protocol.NewBaseInvoker(url))
 -
 -	// make sure url
 -	eq := exporter.GetInvoker().GetUrl().URLEqual(url)
 -	assert.True(t, eq)
 -
 -	// second service: the same path and the different version
 -	url2, err := common.NewURL(mockCommonUrl, common.WithParamsValue(constant.VERSION_KEY, "v1.1"))
 +		"side=provider&timeout=3000&timestamp=1556509797245")
- 	assert.NoError(t, err)
- 	exporter := proto.Export(protocol.NewBaseInvoker(url))
- 
- 	// make sure url
- 	eq := exporter.GetInvoker().GetUrl().URLEqual(url)
- 	assert.True(t, eq)
- 
- 	// second service: the same path and the different version
 +	url2, err := common.NewURL("dubbo://127.0.0.1:20095/com.ikurento.user.UserProvider?anyhost=true&"+
 +		"application=BDTService&category=providers&default.timeout=10000&dubbo=dubbo-provider-golang-1.0.0&"+
 +		"environment=dev&interface=com.ikurento.user.UserProvider&ip=192.168.56.1&methods=GetUser%2C&"+
 +		"module=dubbogo+user-info+server&org=ikurento.com&owner=ZX&pid=1447&revision=0.0.1&"+
 +		"side=provider&timeout=3000&timestamp=1556509797245", common.WithParamsValue(constant.VERSION_KEY, "v1.1"))
  	assert.NoError(t, err)
  	exporter2 := proto.Export(protocol.NewBaseInvoker(url2))
  	// make sure url
@@@ -104,7 -62,7 +96,7 @@@
  	// make sure exporterMap after 'Unexport'
  	_, ok := proto.(*DubboProtocol).ExporterMap().Load(url.ServiceKey())
  	assert.True(t, ok)
--	exporter.Unexport()
++	exporter2.Unexport()
  	_, ok = proto.(*DubboProtocol).ExporterMap().Load(url.ServiceKey())
  	assert.False(t, ok)