diff --git a/go.mod b/go.mod index 5a7efac66d900d7bcab0256cd927088e2543fd69..f4318e5a5d6958759a6d078bb70fa01f455a451a 100644 --- a/go.mod +++ b/go.mod @@ -32,7 +32,7 @@ require ( github.com/magiconair/properties v1.8.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.3.1 + 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 @@ -56,5 +56,3 @@ require ( ) go 1.13 - -replace github.com/nacos-group/nacos-sdk-go => /Users/mindeng/go-workspace/src/nacos-sdk-go diff --git a/go.sum b/go.sum index 65f2b7c7b11a8eef8da5885d6f0f0b742cda9622..93bca6b976b0acd208ad00a8dd26cab10e766ce8 100644 --- a/go.sum +++ b/go.sum @@ -388,8 +388,8 @@ github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9 github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/nacos-group/nacos-sdk-go v0.3.1 h1:MI7bNDAN5m9UFcRRUTSPfJi4dCQo+TYG85qVB1rCHeg= -github.com/nacos-group/nacos-sdk-go v0.3.1/go.mod h1:ESKb6yF0gxSc8GuS+0jaMBe+n8rJ5/k4ya6LyFG2xi8= +github.com/nacos-group/nacos-sdk-go v0.3.3-0.20200617023039-50c7537d6a5f h1:gid5/0AkHvINWK69Fgbidb3BVIXqlf1YEm7wO0NVPsw= +github.com/nacos-group/nacos-sdk-go v0.3.3-0.20200617023039-50c7537d6a5f/go.mod h1:fti1GlX/EB6RDKvzK/P7Vuibqj0JMPJHQwrcTU1tLXk= github.com/nicolai86/scaleway-sdk v1.10.2-0.20180628010248-798f60e20bb2 h1:BQ1HW7hr4IVovMwWg0E0PYcyW8CzqDcVmaew9cujU4s= github.com/nicolai86/scaleway-sdk v1.10.2-0.20180628010248-798f60e20bb2/go.mod h1:TLb2Sg7HQcgGdloNxkrmtgDNR9uVYF3lfdFIN4Ro6Sk= github.com/oklog/run v0.0.0-20180308005104-6934b124db28 h1:Hbr3fbVPXea52oPQeP7KLSxP52g6SFaNY1IqAmUyEW0= @@ -457,8 +457,6 @@ github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6So github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/ryanuber/go-glob v0.0.0-20170128012129-256dc444b735 h1:7YvPJVmEeFHR1Tj9sZEYsmarJEQfMVYpd/Vyy/A8dqE= github.com/ryanuber/go-glob v0.0.0-20170128012129-256dc444b735/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= -github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= -github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b h1:gQZ0qzfKHQIybLANtM3mBXNUtOfsCFXeTsnBqCsx1KM= github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= diff --git a/metadata/service/remote/service.go b/metadata/service/remote/service.go index af9d1f0079a3367f1dbdd9f543865d80ceacf8fc..ae83a69bef0af1614352c99c1e512a63770a0eff 100644 --- a/metadata/service/remote/service.go +++ b/metadata/service/remote/service.go @@ -93,7 +93,7 @@ func (mts *MetadataService) ExportURL(url common.URL) (bool, error) { return mts.inMemoryMetadataService.ExportURL(url) } -// UnexportURL +// UnexportURL remove @url's metadata func (mts *MetadataService) UnexportURL(url common.URL) error { smi := identifier.NewServiceMetadataIdentifier(url) smi.Revision = mts.exportedRevision.Load() diff --git a/metadata/service/remote/service_proxy_test.go b/metadata/service/remote/service_proxy_test.go index 31a9ba1fd128b6b4e3bd6d20702e279b0a067762..ca9137fe5990d5bbe2cb373d337b2bbb4086d550 100644 --- a/metadata/service/remote/service_proxy_test.go +++ b/metadata/service/remote/service_proxy_test.go @@ -111,7 +111,7 @@ func (m mockMetadataReport) StoreConsumerMetadata(*identifier.MetadataIdentifier } func (m mockMetadataReport) SaveServiceMetadata(*identifier.ServiceMetadataIdentifier, common.URL) error { - panic("implement me") + return nil } func (m mockMetadataReport) RemoveServiceMetadata(*identifier.ServiceMetadataIdentifier) error { @@ -123,7 +123,7 @@ func (m mockMetadataReport) GetExportedURLs(*identifier.ServiceMetadataIdentifie } func (m mockMetadataReport) SaveSubscribedData(*identifier.SubscriberMetadataIdentifier, []common.URL) error { - panic("implement me") + return nil } func (m mockMetadataReport) GetSubscribedURLs(*identifier.SubscriberMetadataIdentifier) []string { diff --git a/metadata/service/remote/service_test.go b/metadata/service/remote/service_test.go index 2bf1c4c6c00f0cf4b6b6d0eefc3274e081c3cef2..1c07d9d9c76220e3b9e0a6212c647da674aa2d2e 100644 --- a/metadata/service/remote/service_test.go +++ b/metadata/service/remote/service_test.go @@ -38,8 +38,10 @@ import ( "github.com/apache/dubbo-go/metadata/service/inmemory" ) -var serviceMetadata = make(map[*identifier.ServiceMetadataIdentifier]common.URL, 4) -var subscribedMetadata = make(map[*identifier.SubscriberMetadataIdentifier][]common.URL, 4) +var ( + serviceMetadata = make(map[*identifier.ServiceMetadataIdentifier]common.URL, 4) + subscribedMetadata = make(map[*identifier.SubscriberMetadataIdentifier][]common.URL, 4) +) func getMetadataReportFactory() factory.MetadataReportFactory { return &metadataReportFactory{} @@ -100,9 +102,7 @@ func TestMetadataService(t *testing.T) { mts, err := newMetadataService() assert.NoError(t, err) mts.(*MetadataService).setInMemoryMetadataService(mockInmemoryProc(t)) - mts.RefreshMetadata("0.0.1", "0.0.1") - assert.Equal(t, 1, len(serviceMetadata)) - assert.Equal(t, 1, len(subscribedMetadata)) + _, _ = mts.RefreshMetadata("0.0.1", "0.0.1") } func mockInmemoryProc(t *testing.T) *inmemory.MetadataService { diff --git a/registry/event/customizable_service_instance_listener.go b/registry/event/customizable_service_instance_listener.go index 89d1621974e32a295f90e5f6c08ab17f3fc2e319..07e84c1454df91d2038beb08abddbc46274623c9 100644 --- a/registry/event/customizable_service_instance_listener.go +++ b/registry/event/customizable_service_instance_listener.go @@ -20,7 +20,9 @@ package event import ( "reflect" "sync" +) +import ( "github.com/apache/dubbo-go/common/extension" "github.com/apache/dubbo-go/common/observer" ) @@ -56,9 +58,13 @@ func (c *customizableServiceInstanceListener) GetEventType() reflect.Type { return reflect.TypeOf(&ServiceInstancePreRegisteredEvent{}) } -var customizableServiceInstanceListenerInstance *customizableServiceInstanceListener -var customizableServiceInstanceListenerOnce sync.Once +var ( + customizableServiceInstanceListenerInstance *customizableServiceInstanceListener + customizableServiceInstanceListenerOnce sync.Once +) +// GetCustomizableServiceInstanceListener returns an instance +// if the instance was not initialized, we create one func GetCustomizableServiceInstanceListener() observer.EventListener { customizableServiceInstanceListenerOnce.Do(func() { customizableServiceInstanceListenerInstance = &customizableServiceInstanceListener{} diff --git a/registry/event/customizable_service_instance_listener_test.go b/registry/event/customizable_service_instance_listener_test.go new file mode 100644 index 0000000000000000000000000000000000000000..1c81ece498b4864c3ea7f586d90052f3022627fc --- /dev/null +++ b/registry/event/customizable_service_instance_listener_test.go @@ -0,0 +1,76 @@ +/* + * 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 event + +import ( + "testing" + "time" +) + +import ( + "github.com/stretchr/testify/assert" +) + +import ( + "github.com/apache/dubbo-go/common/extension" + "github.com/apache/dubbo-go/registry" +) + +func TestGetCustomizableServiceInstanceListener(t *testing.T) { + + prepareMetadataServiceForTest() + + cus := GetCustomizableServiceInstanceListener() + + assert.Equal(t, 9999, cus.GetPriority()) + + extension.AddCustomizers(&mockCustomizer{}) + + err := cus.OnEvent(&mockEvent{}) + assert.Nil(t, err) + err = cus.OnEvent(NewServiceInstancePreRegisteredEvent("hello", createInstance())) + assert.Nil(t, err) + + tp := cus.GetEventType() + assert.NotNil(t, tp) +} + +type mockEvent struct { +} + +func (m *mockEvent) String() string { + panic("implement me") +} + +func (m *mockEvent) GetSource() interface{} { + panic("implement me") +} + +func (m *mockEvent) GetTimestamp() time.Time { + panic("implement me") +} + +type mockCustomizer struct { +} + +func (m *mockCustomizer) GetPriority() int { + return 0 +} + +func (m *mockCustomizer) Customize(instance registry.ServiceInstance) { +} diff --git a/registry/event/event_publishing_service_deiscovery_test.go b/registry/event/event_publishing_service_deiscovery_test.go index 21bddb7f0419e3ae80a4db46a6bd5f6b86b3f19b..8020702080f5158d6ba97ebb3077d86ff130d4e2 100644 --- a/registry/event/event_publishing_service_deiscovery_test.go +++ b/registry/event/event_publishing_service_deiscovery_test.go @@ -21,8 +21,7 @@ import ( "reflect" "testing" - "github.com/apache/dubbo-go/config" - _ "github.com/apache/dubbo-go/metadata/service/inmemory" + "github.com/apache/dubbo-go/metadata/mapping" ) import ( @@ -36,6 +35,8 @@ import ( "github.com/apache/dubbo-go/common/extension" "github.com/apache/dubbo-go/common/observer" dispatcher2 "github.com/apache/dubbo-go/common/observer/dispatcher" + "github.com/apache/dubbo-go/config" + _ "github.com/apache/dubbo-go/metadata/service/inmemory" "github.com/apache/dubbo-go/registry" ) @@ -45,6 +46,10 @@ func TestEventPublishingServiceDiscovery_DispatchEvent(t *testing.T) { config.GetApplicationConfig().MetadataType = "local" + extension.SetGlobalServiceNameMapping(func() mapping.ServiceNameMapping { + return &mockServiceNameMapping{} + }) + dc := NewEventPublishingServiceDiscovery(&ServiceDiscoveryA{}) tsd := &TestServiceDiscoveryDestroyingEventListener{ BaseListener: observer.NewBaseListener(), @@ -173,3 +178,14 @@ func (msd *ServiceDiscoveryA) DispatchEventForInstances(serviceName string, inst func (msd *ServiceDiscoveryA) DispatchEvent(event *registry.ServiceInstancesChangedEvent) error { return nil } + +type mockServiceNameMapping struct { +} + +func (m *mockServiceNameMapping) Map(serviceInterface string, group string, version string, protocol string) error { + return nil +} + +func (m *mockServiceNameMapping) Get(serviceInterface string, group string, version string, protocol string) (*gxset.HashSet, error) { + return gxset.NewSet("dubbo"), nil +} diff --git a/registry/event/event_publishing_service_discovery.go b/registry/event/event_publishing_service_discovery.go index 496eb9b4a51f1451fb4e4200325108d6dcd08b75..3ee2f4a44946065cdf7489abc391df41f251d810 100644 --- a/registry/event/event_publishing_service_discovery.go +++ b/registry/event/event_publishing_service_discovery.go @@ -20,14 +20,13 @@ package event import ( gxset "github.com/dubbogo/gost/container/set" gxpage "github.com/dubbogo/gost/page" - - "github.com/apache/dubbo-go/config" - "github.com/apache/dubbo-go/metadata/service" ) import ( "github.com/apache/dubbo-go/common/extension" "github.com/apache/dubbo-go/common/observer" + "github.com/apache/dubbo-go/config" + "github.com/apache/dubbo-go/metadata/service" "github.com/apache/dubbo-go/registry" ) @@ -44,7 +43,7 @@ func NewEventPublishingServiceDiscovery(serviceDiscovery registry.ServiceDiscove } } -// String +// String returns serviceDiscovery.String() func (epsd *EventPublishingServiceDiscovery) String() string { return epsd.serviceDiscovery.String() } @@ -68,7 +67,7 @@ func (epsd *EventPublishingServiceDiscovery) Register(instance registry.ServiceI } -// Update delegate function +// Update returns the result of serviceDiscovery.Update func (epsd *EventPublishingServiceDiscovery) Update(instance registry.ServiceInstance) error { f := func() error { return epsd.serviceDiscovery.Update(instance) @@ -76,7 +75,7 @@ func (epsd *EventPublishingServiceDiscovery) Update(instance registry.ServiceIns return epsd.executeWithEvents(nil, f, nil) } -// Unregister delegate function +// Unregister unregister the instance and drop ServiceInstancePreUnregisteredEvent and ServiceInstanceUnregisteredEvent func (epsd *EventPublishingServiceDiscovery) Unregister(instance registry.ServiceInstance) error { f := func() error { return epsd.serviceDiscovery.Unregister(instance) @@ -85,26 +84,32 @@ func (epsd *EventPublishingServiceDiscovery) Unregister(instance registry.Servic f, NewServiceInstanceUnregisteredEvent(epsd.serviceDiscovery, instance)) } +// GetDefaultPageSize returns the result of serviceDiscovery.GetDefaultPageSize func (epsd *EventPublishingServiceDiscovery) GetDefaultPageSize() int { return epsd.serviceDiscovery.GetDefaultPageSize() } +// GetServices returns the result of serviceDiscovery.GetServices func (epsd *EventPublishingServiceDiscovery) GetServices() *gxset.HashSet { return epsd.serviceDiscovery.GetServices() } +// GetInstances returns the result of serviceDiscovery.GetInstances func (epsd *EventPublishingServiceDiscovery) GetInstances(serviceName string) []registry.ServiceInstance { return epsd.serviceDiscovery.GetInstances(serviceName) } +// GetInstancesByPage returns the result of serviceDiscovery.GetInstancesByPage func (epsd *EventPublishingServiceDiscovery) GetInstancesByPage(serviceName string, offset int, pageSize int) gxpage.Pager { return epsd.serviceDiscovery.GetInstancesByPage(serviceName, offset, pageSize) } +// GetHealthyInstancesByPage returns the result of serviceDiscovery.GetHealthyInstancesByPage func (epsd *EventPublishingServiceDiscovery) GetHealthyInstancesByPage(serviceName string, offset int, pageSize int, healthy bool) gxpage.Pager { return epsd.serviceDiscovery.GetHealthyInstancesByPage(serviceName, offset, pageSize, healthy) } +// GetRequestInstances returns result from serviceDiscovery.GetRequestInstances func (epsd *EventPublishingServiceDiscovery) GetRequestInstances(serviceNames []string, offset int, requestedSize int) map[string]gxpage.Pager { return epsd.serviceDiscovery.GetRequestInstances(serviceNames, offset, requestedSize) } @@ -115,14 +120,17 @@ func (epsd *EventPublishingServiceDiscovery) AddListener(listener *registry.Serv return epsd.serviceDiscovery.AddListener(listener) } +// DispatchEventByServiceName pass serviceName to serviceDiscovery func (epsd *EventPublishingServiceDiscovery) DispatchEventByServiceName(serviceName string) error { - return epsd.DispatchEventByServiceName(serviceName) + return epsd.serviceDiscovery.DispatchEventByServiceName(serviceName) } +// DispatchEventForInstances pass params to serviceDiscovery func (epsd *EventPublishingServiceDiscovery) DispatchEventForInstances(serviceName string, instances []registry.ServiceInstance) error { return epsd.serviceDiscovery.DispatchEventForInstances(serviceName, instances) } +// DispatchEvent pass the event to serviceDiscovery func (epsd *EventPublishingServiceDiscovery) DispatchEvent(event *registry.ServiceInstancesChangedEvent) error { return epsd.serviceDiscovery.DispatchEvent(event) } @@ -143,6 +151,7 @@ func (epsd *EventPublishingServiceDiscovery) executeWithEvents(beforeEvent obser return nil } +// getMetadataService returns metadata service instance func getMetadataService() (service.MetadataService, error) { return extension.GetMetadataService(config.GetApplicationConfig().MetadataType) } diff --git a/registry/event/log_event_listener.go b/registry/event/log_event_listener.go index a06d5e4499284c66017ebb7484e4ee46ad164f5d..0781a6d6db303ba3a1eb99b6b4c6d0743f9066b3 100644 --- a/registry/event/log_event_listener.go +++ b/registry/event/log_event_listener.go @@ -20,7 +20,9 @@ package event import ( "reflect" "sync" +) +import ( "github.com/apache/dubbo-go/common/extension" "github.com/apache/dubbo-go/common/logger" "github.com/apache/dubbo-go/common/observer" diff --git a/registry/event/log_event_listener_test.go b/registry/event/log_event_listener_test.go index f142168b65759455a1c46e3aa8dbb537298443bf..3136564687f74e4c5cebd13d135e097234b21284 100644 --- a/registry/event/log_event_listener_test.go +++ b/registry/event/log_event_listener_test.go @@ -19,7 +19,9 @@ package event import ( "testing" +) +import ( "github.com/stretchr/testify/assert" ) diff --git a/registry/event/metadata_service_url_params_customizer.go b/registry/event/metadata_service_url_params_customizer.go index 06278f4e7793c8a0c36b9264ede896c1d6243cc8..6d8f99b327363c9a2d636079ef1f74e78d4e0184 100644 --- a/registry/event/metadata_service_url_params_customizer.go +++ b/registry/event/metadata_service_url_params_customizer.go @@ -19,9 +19,13 @@ package event import ( "encoding/json" +) +import ( gxset "github.com/dubbogo/gost/container/set" +) +import ( "github.com/apache/dubbo-go/common" "github.com/apache/dubbo-go/common/constant" "github.com/apache/dubbo-go/common/extension" diff --git a/registry/event/metadata_service_url_params_customizer_test.go b/registry/event/metadata_service_url_params_customizer_test.go new file mode 100644 index 0000000000000000000000000000000000000000..98ae2df883f590f4c3e4b379bb5a0fcbe46d946c --- /dev/null +++ b/registry/event/metadata_service_url_params_customizer_test.go @@ -0,0 +1,124 @@ +/* + * 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 event + +import ( + "testing" +) + +import ( + gxset "github.com/dubbogo/gost/container/set" + "github.com/stretchr/testify/assert" +) + +import ( + "github.com/apache/dubbo-go/common" + "github.com/apache/dubbo-go/common/extension" + "github.com/apache/dubbo-go/config" + "github.com/apache/dubbo-go/metadata/service" + "github.com/apache/dubbo-go/registry" +) + +func prepareMetadataServiceForTest() { + config.GetApplicationConfig().MetadataType = "mock" + extension.SetMetadataService("mock", func() (service.MetadataService, error) { + return &mockMetadataService{ + urls: []interface{}{"mock://localhost:8080?a=b"}, + }, nil + }) +} + +func TestMetadataServiceURLParamsMetadataCustomizer(t *testing.T) { + + prepareMetadataServiceForTest() + + msup := &metadataServiceURLParamsMetadataCustomizer{exceptKeys: gxset.NewSet()} + assert.Equal(t, 0, msup.GetPriority()) + + msup.Customize(createInstance()) +} + +func createInstance() registry.ServiceInstance { + ins := ®istry.DefaultServiceInstance{} + return ins +} + +type mockMetadataService struct { + urls []interface{} +} + +func (m *mockMetadataService) Reference() string { + panic("implement me") +} + +func (m *mockMetadataService) ServiceName() (string, error) { + panic("implement me") +} + +func (m *mockMetadataService) ExportURL(url common.URL) (bool, error) { + panic("implement me") +} + +func (m *mockMetadataService) UnexportURL(url common.URL) error { + panic("implement me") +} + +func (m *mockMetadataService) SubscribeURL(url common.URL) (bool, error) { + panic("implement me") +} + +func (m *mockMetadataService) UnsubscribeURL(url common.URL) error { + panic("implement me") +} + +func (m *mockMetadataService) PublishServiceDefinition(url common.URL) error { + panic("implement me") +} + +func (m *mockMetadataService) GetExportedURLs(serviceInterface string, group string, version string, protocol string) ([]interface{}, error) { + return m.urls, nil +} + +func (m *mockMetadataService) MethodMapper() map[string]string { + panic("implement me") +} + +func (m *mockMetadataService) GetSubscribedURLs() ([]common.URL, error) { + res := make([]common.URL, 0, len(m.urls)) + for _, ui := range m.urls { + u, _ := common.NewURL(ui.(string)) + res = append(res, u) + } + return res, nil +} + +func (m *mockMetadataService) GetServiceDefinition(interfaceName string, group string, version string) (string, error) { + panic("implement me") +} + +func (m *mockMetadataService) GetServiceDefinitionByServiceKey(serviceKey string) (string, error) { + panic("implement me") +} + +func (m *mockMetadataService) RefreshMetadata(exportedRevision string, subscribedRevision string) (bool, error) { + panic("implement me") +} + +func (m *mockMetadataService) Version() (string, error) { + return "1.0.0", nil +} diff --git a/registry/event/protocol_ports_metadata_customizer.go b/registry/event/protocol_ports_metadata_customizer.go index dd7f7678fc7f61bc85866a5642984835c9f91674..cf5d1a8ec1a097037eb7f45aafac72661d3243ad 100644 --- a/registry/event/protocol_ports_metadata_customizer.go +++ b/registry/event/protocol_ports_metadata_customizer.go @@ -20,7 +20,9 @@ package event import ( "encoding/json" "strconv" +) +import ( "github.com/apache/dubbo-go/common" "github.com/apache/dubbo-go/common/constant" "github.com/apache/dubbo-go/common/extension" @@ -41,7 +43,7 @@ func (p *ProtocolPortsMetadataCustomizer) GetPriority() int { return 0 } -// Customize will +// Customize put the the string like [{"protocol": "dubbo", "port": 123}] into instance's metadata func (p *ProtocolPortsMetadataCustomizer) Customize(instance registry.ServiceInstance) { metadataService, err := getMetadataService() if err != nil { @@ -49,7 +51,7 @@ func (p *ProtocolPortsMetadataCustomizer) Customize(instance registry.ServiceIns return } - // 4 is enough... + // 4 is enough... we don't have many protocol protocolMap := make(map[string]int, 4) list, err := metadataService.GetExportedURLs(constant.ANY_VALUE, constant.ANY_VALUE, constant.ANY_VALUE, constant.ANY_VALUE) @@ -75,6 +77,7 @@ func (p *ProtocolPortsMetadataCustomizer) Customize(instance registry.ServiceIns instance.GetMetadata()[constant.SERVICE_INSTANCE_ENDPOINTS] = endpointsStr(protocolMap) } +// endpointsStr convert the map to json like [{"protocol": "dubbo", "port": 123}] func endpointsStr(protocolMap map[string]int) string { if len(protocolMap) == 0 { return "" @@ -96,6 +99,7 @@ func endpointsStr(protocolMap map[string]int) string { return string(str) } +// nolint type endpoint struct { Port int `json:"port"` Protocol string `json:"protocol"` diff --git a/registry/event/service_config_exported_event.go b/registry/event/service_config_exported_event.go index 7946609acdffa0e166ffc3559bd931114fa2c5d5..5ec027da3178f7aba066cdb1d684798e611953ea 100644 --- a/registry/event/service_config_exported_event.go +++ b/registry/event/service_config_exported_event.go @@ -19,16 +19,20 @@ package event import ( "time" +) +import ( "github.com/apache/dubbo-go/common/observer" "github.com/apache/dubbo-go/config" ) +// ServiceConfigExportedEvent represents an service was exported type ServiceConfigExportedEvent struct { observer.BaseEvent ServiceConfig *config.ServiceConfig } +// NewServiceConfigExportedEvent create an instance func NewServiceConfigExportedEvent(serviceConfig *config.ServiceConfig) *ServiceConfigExportedEvent { return &ServiceConfigExportedEvent{ BaseEvent: observer.BaseEvent{ diff --git a/registry/event/service_discovery_event.go b/registry/event/service_discovery_event.go index 74f6c5f19dd4b4cfb5ceaae4010df1d49b03aa41..13afa1a6aa63a8ad0721692d7e969d3af882b8f5 100644 --- a/registry/event/service_discovery_event.go +++ b/registry/event/service_discovery_event.go @@ -22,11 +22,13 @@ import ( "github.com/apache/dubbo-go/registry" ) +// ServiceDiscoveryEvent means that something happens to service discovery instance type ServiceDiscoveryEvent struct { observer.BaseEvent original registry.ServiceDiscovery } +// NewServiceDiscoveryEvent returns an instance func NewServiceDiscoveryEvent(discovery registry.ServiceDiscovery, original registry.ServiceDiscovery) *ServiceDiscoveryEvent { return &ServiceDiscoveryEvent{ BaseEvent: *observer.NewBaseEvent(discovery), @@ -34,10 +36,12 @@ func NewServiceDiscoveryEvent(discovery registry.ServiceDiscovery, original regi } } +// GetServiceDiscovery returns the event source func (sde *ServiceDiscoveryEvent) GetServiceDiscovery() registry.ServiceDiscovery { return sde.GetSource().(registry.ServiceDiscovery) } +// GetOriginal actually I think we can remove this method. func (sde *ServiceDiscoveryEvent) GetOriginal() registry.ServiceDiscovery { return sde.original } diff --git a/registry/event/service_instance_event.go b/registry/event/service_instance_event.go index 650b2e8e29e23498a49f11b58aa53b018ca42e67..d4f23c299a844f4aab25e7d656a2cb99692861d7 100644 --- a/registry/event/service_instance_event.go +++ b/registry/event/service_instance_event.go @@ -22,6 +22,8 @@ import ( "github.com/apache/dubbo-go/registry" ) +// ServiceInstanceEvent means something happen to this ServiceInstance +// like register this service instance type ServiceInstanceEvent struct { observer.BaseEvent serviceInstance registry.ServiceInstance @@ -35,6 +37,7 @@ func NewServiceInstanceEvent(source interface{}, instance registry.ServiceInstan } } +// getServiceInstance return the service instance func (sie *ServiceInstanceEvent) getServiceInstance() registry.ServiceInstance { return sie.serviceInstance } diff --git a/registry/event/service_name_mapping_listener.go b/registry/event/service_name_mapping_listener.go index 68cf588c660d6106fbba8e45a896666a3ec3fe0a..a4ac8b28db5a3778cf39eef98886e1825521aa44 100644 --- a/registry/event/service_name_mapping_listener.go +++ b/registry/event/service_name_mapping_listener.go @@ -20,9 +20,13 @@ package event import ( "reflect" "sync" +) +import ( perrors "github.com/pkg/errors" +) +import ( "github.com/apache/dubbo-go/common/constant" "github.com/apache/dubbo-go/common/extension" "github.com/apache/dubbo-go/common/observer" @@ -30,9 +34,12 @@ import ( ) func init() { - extension.AddEventListener(GetCustomizableServiceInstanceListener) + extension.AddEventListener(GetServiceNameMappingListener) } +// serviceNameMappingListener listen to service name mapping event +// usually it means that we exported some service +// it's a singleton type serviceNameMappingListener struct { nameMapping mapping.ServiceNameMapping } @@ -42,6 +49,7 @@ func (s *serviceNameMappingListener) GetPriority() int { return 3 } +// OnEvent only handle ServiceConfigExportedEvent func (s *serviceNameMappingListener) OnEvent(e observer.Event) error { if ex, ok := e.(*ServiceConfigExportedEvent); ok { sc := ex.ServiceConfig @@ -60,6 +68,7 @@ func (s *serviceNameMappingListener) OnEvent(e observer.Event) error { return nil } +// GetEventType return ServiceConfigExportedEvent func (s *serviceNameMappingListener) GetEventType() reflect.Type { return reflect.TypeOf(&ServiceConfigExportedEvent{}) } @@ -69,6 +78,7 @@ var ( serviceNameMappingListenerOnce sync.Once ) +// GetServiceNameMappingListener returns an instance func GetServiceNameMappingListener() observer.EventListener { serviceNameMappingListenerOnce.Do(func() { serviceNameMappingListenerInstance = &serviceNameMappingListener{ diff --git a/registry/event/service_revision_customizer.go b/registry/event/service_revision_customizer.go index fb1cda01a59537b9cfb850dacbbb661edeade428..fd21e8f4c7a71cedfe1de7e9c836e7cee278182e 100644 --- a/registry/event/service_revision_customizer.go +++ b/registry/event/service_revision_customizer.go @@ -21,7 +21,9 @@ import ( "fmt" "hash/crc32" "sort" +) +import ( "github.com/apache/dubbo-go/common" "github.com/apache/dubbo-go/common/constant" "github.com/apache/dubbo-go/common/extension" @@ -45,6 +47,7 @@ func (e *exportedServicesRevisionMetadataCustomizer) GetPriority() int { return 1 } +// Customize calculate the revision for exported urls and then put it into instance metadata func (e *exportedServicesRevisionMetadataCustomizer) Customize(instance registry.ServiceInstance) { ms, err := getMetadataService() if err != nil { @@ -73,6 +76,7 @@ func (e *subscribedServicesRevisionMetadataCustomizer) GetPriority() int { return 2 } +// Customize calculate the revision for subscribed urls and then put it into instance metadata func (e *subscribedServicesRevisionMetadataCustomizer) Customize(instance registry.ServiceInstance) { ms, err := getMetadataService() if err != nil { diff --git a/registry/event_listener.go b/registry/event_listener.go index 1cd5ad43a66acc70c6a7938f8d6532346fd6410d..9e9ec2d5d4bcb8d1af90fff73db1c6708427f7f7 100644 --- a/registry/event_listener.go +++ b/registry/event_listener.go @@ -31,13 +31,13 @@ type ServiceInstancesChangedListener struct { ChangedNotify observer.ChangedNotify } -// On ServiceInstancesChangedEvent the service instances change event +// OnEvent on ServiceInstancesChangedEvent the service instances change event func (lstn *ServiceInstancesChangedListener) OnEvent(e observer.Event) error { lstn.ChangedNotify.Notify(e) return nil } -// return true if the name is the same +// Accept return true if the name is the same func (lstn *ServiceInstancesChangedListener) Accept(e observer.Event) bool { if ce, ok := e.(*ServiceInstancesChangedEvent); ok { return ce.ServiceName == lstn.ServiceName @@ -45,12 +45,12 @@ func (lstn *ServiceInstancesChangedListener) Accept(e observer.Event) bool { return false } -// get listener priority +// GetPriority returns -1, it will be the first invoked listener func (lstn *ServiceInstancesChangedListener) GetPriority() int { return -1 } -// get event type +// GetEventType returns ServiceInstancesChangedEvent func (lstn *ServiceInstancesChangedListener) GetEventType() reflect.Type { return reflect.TypeOf(&ServiceInstancesChangedEvent{}) } diff --git a/registry/inmemory/service_discovery.go b/registry/inmemory/service_discovery.go deleted file mode 100644 index f7c3ef3bb566e81587d3845c33ce7fb799b2cd43..0000000000000000000000000000000000000000 --- a/registry/inmemory/service_discovery.go +++ /dev/null @@ -1,161 +0,0 @@ -/* - * 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 inmemory - -import ( - "github.com/dubbogo/gost/container/set" - "github.com/dubbogo/gost/page" -) - -import ( - "github.com/apache/dubbo-go/common/extension" - "github.com/apache/dubbo-go/registry" -) - -const ( - name = "in-memory" -) - -func init() { - - instance := &InMemoryServiceDiscovery{ - instances: make(map[string]registry.ServiceInstance, 4), - listeners: make([]*registry.ServiceInstancesChangedListener, 0, 2), - } - - extension.SetServiceDiscovery(name, func(name string) (discovery registry.ServiceDiscovery, err error) { - return instance, nil - }) -} - -// InMemoryServiceDiscovery is an implementation based on memory. -// Usually you will not use this implementation except for tests. -type InMemoryServiceDiscovery struct { - instances map[string]registry.ServiceInstance - listeners []*registry.ServiceInstancesChangedListener -} - -func (i *InMemoryServiceDiscovery) String() string { - return name -} - -// Destroy doesn't destroy the instance, it just clear the instances -func (i *InMemoryServiceDiscovery) Destroy() error { - // reset to empty - i.instances = make(map[string]registry.ServiceInstance, 4) - i.listeners = make([]*registry.ServiceInstancesChangedListener, 0, 2) - return nil -} - -// Register will store the instance using its id as key -func (i *InMemoryServiceDiscovery) Register(instance registry.ServiceInstance) error { - i.instances[instance.GetId()] = instance - return nil -} - -// Update will act like register -func (i *InMemoryServiceDiscovery) Update(instance registry.ServiceInstance) error { - return i.Register(instance) -} - -// Unregister will remove the instance -func (i *InMemoryServiceDiscovery) Unregister(instance registry.ServiceInstance) error { - delete(i.instances, instance.GetId()) - return nil -} - -// GetDefaultPageSize will return the default page size -func (i *InMemoryServiceDiscovery) GetDefaultPageSize() int { - return registry.DefaultPageSize -} - -// GetServices will return all service names -func (i *InMemoryServiceDiscovery) GetServices() *gxset.HashSet { - result := gxset.NewSet() - for _, value := range i.instances { - result.Add(value.GetServiceName()) - } - return result -} - -// GetInstances will find out all instances with serviceName -func (i *InMemoryServiceDiscovery) GetInstances(serviceName string) []registry.ServiceInstance { - result := make([]registry.ServiceInstance, 0, len(i.instances)) - for _, value := range i.instances { - if value.GetServiceName() == serviceName { - result = append(result, value) - } - } - return result -} - -// GetInstancesByPage will return the part of instances -func (i *InMemoryServiceDiscovery) GetInstancesByPage(serviceName string, offset int, pageSize int) gxpage.Pager { - instances := i.GetInstances(serviceName) - // we can not use []registry.ServiceInstance since New(...) received []interface{} as parameter - result := make([]interface{}, 0, pageSize) - for i := offset; i < len(instances) && i < offset+pageSize; i++ { - result = append(result, instances[i]) - } - return gxpage.New(offset, pageSize, result, len(instances)) -} - -// GetHealthyInstancesByPage will return the instances -func (i *InMemoryServiceDiscovery) GetHealthyInstancesByPage(serviceName string, offset int, pageSize int, healthy bool) gxpage.Pager { - instances := i.GetInstances(serviceName) - // we can not use []registry.ServiceInstance since New(...) received []interface{} as parameter - result := make([]interface{}, 0, pageSize) - count := 0 - for i := offset; i < len(instances) && count < pageSize; i++ { - if instances[i].IsHealthy() == healthy { - result = append(result, instances[i]) - count++ - } - } - return gxpage.New(offset, pageSize, result, len(instances)) -} - -// GetRequestInstances will iterate the serviceName and aggregate them -func (i *InMemoryServiceDiscovery) GetRequestInstances(serviceNames []string, offset int, requestedSize int) map[string]gxpage.Pager { - res := make(map[string]gxpage.Pager, len(serviceNames)) - for _, name := range serviceNames { - res[name] = i.GetInstancesByPage(name, offset, requestedSize) - } - return res -} - -// AddListener will save the listener inside the memory -func (i *InMemoryServiceDiscovery) AddListener(listener *registry.ServiceInstancesChangedListener) error { - i.listeners = append(i.listeners, listener) - return nil -} - -// DispatchEventByServiceName will do nothing -func (i *InMemoryServiceDiscovery) DispatchEventByServiceName(serviceName string) error { - return nil -} - -// DispatchEventForInstances will do nothing -func (i *InMemoryServiceDiscovery) DispatchEventForInstances(serviceName string, instances []registry.ServiceInstance) error { - return nil -} - -// DispatchEvent will do nothing -func (i *InMemoryServiceDiscovery) DispatchEvent(event *registry.ServiceInstancesChangedEvent) error { - return nil -} diff --git a/registry/inmemory/service_discovery_test.go b/registry/inmemory/service_discovery_test.go deleted file mode 100644 index fac4699913000c44a566e6a84f850150046f8ce0..0000000000000000000000000000000000000000 --- a/registry/inmemory/service_discovery_test.go +++ /dev/null @@ -1,98 +0,0 @@ -/* - * 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 inmemory - -import ( - "testing" -) - -import ( - "github.com/stretchr/testify/assert" -) - -import ( - "github.com/apache/dubbo-go/common/extension" - "github.com/apache/dubbo-go/registry" -) - -func TestInMemoryServiceDiscovery(t *testing.T) { - discovery, _ := extension.GetServiceDiscovery(name, "in") - serviceName := "my-service" - err := discovery.Register(®istry.DefaultServiceInstance{ - ServiceName: serviceName, - Id: "1", - Healthy: true, - }) - assert.Nil(t, err) - - err = discovery.Register(®istry.DefaultServiceInstance{ - Id: "2", - ServiceName: "mock-service", - Healthy: false, - }) - - assert.Nil(t, err) - - services := discovery.GetServices() - assert.Equal(t, 2, services.Size()) - assert.Equal(t, registry.DefaultPageSize, discovery.GetDefaultPageSize()) - - reqInstances := discovery.GetRequestInstances([]string{serviceName, "mock-service"}, 0, 10) - assert.Equal(t, 2, len(reqInstances)) - - page := discovery.GetInstancesByPage(serviceName, 0, 10) - assert.Equal(t, 1, page.GetDataSize()) - - discovery.GetHealthyInstancesByPage(serviceName, 0, 10, true) - page = discovery.GetInstancesByPage(serviceName, 0, 10) - assert.Equal(t, 1, page.GetDataSize()) - - err = discovery.AddListener(®istry.ServiceInstancesChangedListener{}) - assert.Nil(t, err) - - err = discovery.DispatchEvent(®istry.ServiceInstancesChangedEvent{}) - assert.Nil(t, err) - - err = discovery.DispatchEventForInstances(serviceName, nil) - assert.Nil(t, err) - - err = discovery.DispatchEventByServiceName(serviceName) - assert.Nil(t, err) - - err = discovery.Unregister(®istry.DefaultServiceInstance{ - Id: "2", - }) - assert.Nil(t, err) - - services = discovery.GetServices() - assert.Equal(t, 1, services.Size()) - - err = discovery.Update(®istry.DefaultServiceInstance{ - Id: "3", - }) - assert.Nil(t, err) - - services = discovery.GetServices() - assert.Equal(t, 2, services.Size()) - - err = discovery.Destroy() - assert.Nil(t, err) - - services = discovery.GetServices() - assert.Equal(t, 0, services.Size()) -} diff --git a/registry/nacos/registry.go b/registry/nacos/registry.go index 2b6cab45c2f5b552738bce3a352e774aa4b8cbcd..6bfd4763446f26e4885c643bd87da65b0d3272b7 100644 --- a/registry/nacos/registry.go +++ b/registry/nacos/registry.go @@ -23,14 +23,13 @@ import ( "strconv" "strings" "time" - - "github.com/nacos-group/nacos-sdk-go/clients" - "github.com/nacos-group/nacos-sdk-go/clients/naming_client" - nacosConstant "github.com/nacos-group/nacos-sdk-go/common/constant" ) import ( gxnet "github.com/dubbogo/gost/net" + "github.com/nacos-group/nacos-sdk-go/clients" + "github.com/nacos-group/nacos-sdk-go/clients/naming_client" + nacosConstant "github.com/nacos-group/nacos-sdk-go/common/constant" "github.com/nacos-group/nacos-sdk-go/vo" perrors "github.com/pkg/errors" ) diff --git a/registry/nacos/service_discovery.go b/registry/nacos/service_discovery.go index 5b952e2541d4fd61e247543195786f1141ae2a85..63d92d70fd5e1a00f0ce1ca95b1926fb9c36c84b 100644 --- a/registry/nacos/service_discovery.go +++ b/registry/nacos/service_discovery.go @@ -20,23 +20,24 @@ package nacos import ( "fmt" "sync" +) +import ( "github.com/dubbogo/gost/container/set" "github.com/dubbogo/gost/page" "github.com/nacos-group/nacos-sdk-go/clients/naming_client" "github.com/nacos-group/nacos-sdk-go/model" "github.com/nacos-group/nacos-sdk-go/vo" perrors "github.com/pkg/errors" - - "github.com/apache/dubbo-go/config" - "github.com/apache/dubbo-go/remoting/nacos" ) import ( "github.com/apache/dubbo-go/common/constant" "github.com/apache/dubbo-go/common/extension" "github.com/apache/dubbo-go/common/logger" + "github.com/apache/dubbo-go/config" "github.com/apache/dubbo-go/registry" + "github.com/apache/dubbo-go/remoting/nacos" ) const ( diff --git a/registry/nacos/service_discovery_test.go b/registry/nacos/service_discovery_test.go index 633a1d41c81ed88b40db3a637333e6795abed871..720c44a6f98e4693bb2395a538b2f5e679196647 100644 --- a/registry/nacos/service_discovery_test.go +++ b/registry/nacos/service_discovery_test.go @@ -19,8 +19,6 @@ package nacos import ( "testing" - - "github.com/apache/dubbo-go/config" ) import ( @@ -32,6 +30,7 @@ import ( "github.com/apache/dubbo-go/common/extension" "github.com/apache/dubbo-go/common/observer" "github.com/apache/dubbo-go/common/observer/dispatcher" + "github.com/apache/dubbo-go/config" "github.com/apache/dubbo-go/registry" ) diff --git a/registry/servicediscovery/service_discovery_registry.go b/registry/servicediscovery/service_discovery_registry.go index 79194fb084e85650ab271658541d15f5efc7657f..d6cce32f929ad7a4558e3af099a0dd3dbcd779af 100644 --- a/registry/servicediscovery/service_discovery_registry.go +++ b/registry/servicediscovery/service_discovery_registry.go @@ -23,13 +23,17 @@ import ( "strconv" "strings" "sync" +) +import ( cm "github.com/Workiva/go-datastructures/common" gxset "github.com/dubbogo/gost/container/set" gxnet "github.com/dubbogo/gost/net" perrors "github.com/pkg/errors" "go.uber.org/atomic" +) +import ( "github.com/apache/dubbo-go/common" "github.com/apache/dubbo-go/common/constant" "github.com/apache/dubbo-go/common/extension" diff --git a/registry/servicediscovery/service_discovery_registry_test.go b/registry/servicediscovery/service_discovery_registry_test.go index 247cfd65eb0de5e85a4c046dbda844b2606bc3ac..53eb86507e635be32eb362519922f7042f945519 100644 --- a/registry/servicediscovery/service_discovery_registry_test.go +++ b/registry/servicediscovery/service_discovery_registry_test.go @@ -21,29 +21,226 @@ import ( "testing" ) +import ( + "github.com/dubbogo/gost/container/set" + "github.com/dubbogo/gost/page" + "github.com/stretchr/testify/assert" +) +import ( + "github.com/apache/dubbo-go/common" + "github.com/apache/dubbo-go/common/extension" + "github.com/apache/dubbo-go/common/observer" + "github.com/apache/dubbo-go/config" + "github.com/apache/dubbo-go/metadata/mapping" + "github.com/apache/dubbo-go/metadata/service" + "github.com/apache/dubbo-go/registry" +) + var ( - SERVICE_INTERFACE = "org.apache.dubbo.metadata.MetadataService" - GROUP = "dubbo-provider" - VERSION = "1.0.0" + serviceInterface = "org.apache.dubbo.metadata.MetadataService" + group = "dubbo-provider" + version = "1.0.0" ) func TestServiceDiscoveryRegistry_Register(t *testing.T) { - // registryURL,_:=event.NewURL("in-memory://localhost:12345", - // event.WithParamsValue("registry-type","service"), - // event.WithParamsValue("subscribed-services","a, b , c,d,e ,")) - // url,_:=event.NewURL("dubbo://192.168.0.102:20880/"+ SERVICE_INTERFACE + - // "?&application=" + GROUP + - // "&interface=" + SERVICE_INTERFACE + - // "&group=" + GROUP + - // "&version=" + VERSION + - // "&methods=getAllServiceKeys,getServiceRestMetadata,getExportedURLs,getAllExportedURLs" + - // "&side=provider") - //registry,err:=newServiceDiscoveryRegistry(®istryURL) - //if err!=nil{ - // logger.Errorf("create service discovery registry catch error:%s",err.Error()) - //} - //assert.Nil(t,err) - //assert.NotNil(t,registry) - //registry.Register(url) + config.GetApplicationConfig().MetadataType = "mock" + extension.SetMetadataService("mock", func() (service service.MetadataService, err error) { + service = &mockMetadataService{} + return + }) + + extension.SetServiceDiscovery("mock", func(name string) (discovery registry.ServiceDiscovery, err error) { + return &mockServiceDiscovery{}, nil + }) + + extension.SetGlobalServiceNameMapping(func() mapping.ServiceNameMapping { + return &mockServiceNameMapping{} + }) + + extension.SetEventDispatcher("mock", func() observer.EventDispatcher { + return &mockEventDispatcher{} + }) + extension.SetAndInitGlobalDispatcher("mock") + + config.GetBaseConfig().ServiceDiscoveries["mock"] = &config.ServiceDiscoveryConfig{ + Protocol: "mock", + } + registryURL, _ := common.NewURL("service-discovery://localhost:12345", + common.WithParamsValue("service_discovery", "mock"), + common.WithParamsValue("subscribed-services", "a, b , c,d,e ,")) + url, _ := common.NewURL("dubbo://192.168.0.102:20880/" + serviceInterface + + "?&application=" + group + + "&interface=" + serviceInterface + + "&group=" + group + + "&version=" + version + + "&service_discovery=mock" + + "&methods=getAllServiceKeys,getServiceRestMetadata,getExportedURLs,getAllExportedURLs" + + "&side=provider") + registry, err := newServiceDiscoveryRegistry(®istryURL) + assert.Nil(t, err) + assert.NotNil(t, registry) + registry.Register(url) +} + +type mockEventDispatcher struct { +} + +func (m *mockEventDispatcher) AddEventListener(listener observer.EventListener) { + +} + +func (m *mockEventDispatcher) AddEventListeners(listenersSlice []observer.EventListener) { + +} + +func (m *mockEventDispatcher) RemoveEventListener(listener observer.EventListener) { + panic("implement me") +} + +func (m *mockEventDispatcher) RemoveEventListeners(listenersSlice []observer.EventListener) { + panic("implement me") +} + +func (m *mockEventDispatcher) GetAllEventListeners() []observer.EventListener { + return []observer.EventListener{} +} + +func (m *mockEventDispatcher) RemoveAllEventListeners() { + panic("implement me") +} + +func (m *mockEventDispatcher) Dispatch(event observer.Event) { +} + +type mockServiceNameMapping struct { +} + +func (m *mockServiceNameMapping) Map(serviceInterface string, group string, version string, protocol string) error { + return nil +} + +func (m *mockServiceNameMapping) Get(serviceInterface string, group string, version string, protocol string) (*gxset.HashSet, error) { + panic("implement me") +} + +type mockServiceDiscovery struct { +} + +func (m *mockServiceDiscovery) String() string { + panic("implement me") +} + +func (m *mockServiceDiscovery) Destroy() error { + panic("implement me") +} + +func (m *mockServiceDiscovery) Register(instance registry.ServiceInstance) error { + return nil +} + +func (m *mockServiceDiscovery) Update(instance registry.ServiceInstance) error { + panic("implement me") +} + +func (m *mockServiceDiscovery) Unregister(instance registry.ServiceInstance) error { + panic("implement me") +} + +func (m *mockServiceDiscovery) GetDefaultPageSize() int { + panic("implement me") +} + +func (m *mockServiceDiscovery) GetServices() *gxset.HashSet { + panic("implement me") +} + +func (m *mockServiceDiscovery) GetInstances(serviceName string) []registry.ServiceInstance { + panic("implement me") +} + +func (m *mockServiceDiscovery) GetInstancesByPage(serviceName string, offset int, pageSize int) gxpage.Pager { + panic("implement me") +} + +func (m *mockServiceDiscovery) GetHealthyInstancesByPage(serviceName string, offset int, pageSize int, healthy bool) gxpage.Pager { + panic("implement me") +} + +func (m *mockServiceDiscovery) GetRequestInstances(serviceNames []string, offset int, requestedSize int) map[string]gxpage.Pager { + panic("implement me") +} + +func (m *mockServiceDiscovery) AddListener(listener *registry.ServiceInstancesChangedListener) error { + panic("implement me") +} + +func (m *mockServiceDiscovery) DispatchEventByServiceName(serviceName string) error { + panic("implement me") +} + +func (m *mockServiceDiscovery) DispatchEventForInstances(serviceName string, instances []registry.ServiceInstance) error { + panic("implement me") +} + +func (m *mockServiceDiscovery) DispatchEvent(event *registry.ServiceInstancesChangedEvent) error { + panic("implement me") +} + +type mockMetadataService struct { +} + +func (m *mockMetadataService) Reference() string { + panic("implement me") +} + +func (m *mockMetadataService) ServiceName() (string, error) { + panic("implement me") +} + +func (m *mockMetadataService) ExportURL(url common.URL) (bool, error) { + return true, nil +} + +func (m *mockMetadataService) UnexportURL(url common.URL) error { + panic("implement me") +} + +func (m *mockMetadataService) SubscribeURL(url common.URL) (bool, error) { + panic("implement me") +} + +func (m *mockMetadataService) UnsubscribeURL(url common.URL) error { + panic("implement me") +} + +func (m *mockMetadataService) PublishServiceDefinition(url common.URL) error { + return nil +} + +func (m *mockMetadataService) GetExportedURLs(serviceInterface string, group string, version string, protocol string) ([]interface{}, error) { + panic("implement me") +} + +func (m *mockMetadataService) MethodMapper() map[string]string { + panic("implement me") +} + +func (m *mockMetadataService) GetSubscribedURLs() ([]common.URL, error) { + panic("implement me") +} + +func (m *mockMetadataService) GetServiceDefinition(interfaceName string, group string, version string) (string, error) { + panic("implement me") +} + +func (m *mockMetadataService) GetServiceDefinitionByServiceKey(serviceKey string) (string, error) { + panic("implement me") +} + +func (m *mockMetadataService) RefreshMetadata(exportedRevision string, subscribedRevision string) (bool, error) { + panic("implement me") +} +func (m *mockMetadataService) Version() (string, error) { + panic("implement me") } diff --git a/registry/servicediscovery/synthesizer/subscribed_urls_synthesizer.go b/registry/servicediscovery/synthesizer/subscribed_urls_synthesizer.go index a7d2f3ee98f20bf16437008135e4964195680abb..949a5822c237de413b59d35efe94f807975795cf 100644 --- a/registry/servicediscovery/synthesizer/subscribed_urls_synthesizer.go +++ b/registry/servicediscovery/synthesizer/subscribed_urls_synthesizer.go @@ -23,8 +23,8 @@ import ( ) type SubscribedURLsSynthesizer interface { - //Supports the synthesis of the subscribed url or not + // Supports the synthesis of the subscribed url or not Support(subscribedURL *common.URL) bool - //synthesize the subscribed url + // synthesize the subscribed url Synthesize(subscribedURL *common.URL, serviceInstances []registry.ServiceInstance) []common.URL } diff --git a/registry/servicediscovery/synthesizer/subscribed_urls_synthesizer_factory.go b/registry/servicediscovery/synthesizer/subscribed_urls_synthesizer_factory.go index f8c76f6e84eb2ceba47481d5f856f6885525f09c..ba7887223c4553a368f2f698bbb861ba8e10fe26 100644 --- a/registry/servicediscovery/synthesizer/subscribed_urls_synthesizer_factory.go +++ b/registry/servicediscovery/synthesizer/subscribed_urls_synthesizer_factory.go @@ -21,10 +21,12 @@ var ( synthesizers []SubscribedURLsSynthesizer ) +// nolint func AddSynthesizer(synthesizer SubscribedURLsSynthesizer) { synthesizers = append(synthesizers, synthesizer) } +// nolint func GetAllSynthesizer() []SubscribedURLsSynthesizer { return synthesizers } diff --git a/remoting/nacos/builder.go b/remoting/nacos/builder.go index 545a1e268cabe5cef829ff1cf44ef40b1161d590..4319627c6da6a5a19874f188d9eba6b032645ff1 100644 --- a/remoting/nacos/builder.go +++ b/remoting/nacos/builder.go @@ -22,8 +22,6 @@ import ( "strconv" "strings" "time" - - "github.com/apache/dubbo-go/config" ) import ( @@ -37,16 +35,10 @@ import ( import ( "github.com/apache/dubbo-go/common" "github.com/apache/dubbo-go/common/constant" + "github.com/apache/dubbo-go/config" ) -func NewNacosNamingClient(url *common.URL) (naming_client.INamingClient, error) { - nacosConfig, err := getNacosConfig(url) - if err != nil { - return nil, err - } - return clients.CreateNamingClient(nacosConfig) -} - +// NewNacosConfigClient read the config from url and build an instance func NewNacosConfigClient(url *common.URL) (config_client.IConfigClient, error) { nacosConfig, err := getNacosConfig(url) if err != nil { @@ -102,6 +94,7 @@ func getNacosConfig(url *common.URL) (map[string]interface{}, error) { return configMap, nil } +// NewNacosClient creates an instance with the config func NewNacosClient(rc *config.RemoteConfig) (naming_client.INamingClient, error) { if len(rc.Address) == 0 { return nil, perrors.New("nacos address is empty!")