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 <fangyinch...@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)
  

Reply via email to