diff --git a/common/extension/event_dispatcher.go b/common/extension/event_dispatcher.go new file mode 100644 index 0000000000000000000000000000000000000000..3f7fcee17cddcdc5427baf9c095483e264e3973f --- /dev/null +++ b/common/extension/event_dispatcher.go @@ -0,0 +1,61 @@ +/* + * 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 extension + +import ( + "github.com/apache/dubbo-go/common/logger" + "github.com/apache/dubbo-go/common/observer" +) + +var globalEventDispatcher observer.EventDispatcher + +var initEventListeners []observer.EventListener + +var ( + dispatchers = make(map[string]func() observer.EventDispatcher, 8) +) + +// SetEventDispatcher by name +func SetEventDispatcher(name string, v func() observer.EventDispatcher) { + dispatchers[name] = v +} + +// SetAndInitGlobalDispatcher +func SetAndInitGlobalDispatcher(name string) { + if len(name) == 0 { + name = "direct" + } + if globalEventDispatcher != nil { + logger.Warnf("EventDispatcher already init. It will be replaced") + } + if dp, ok := dispatchers[name]; !ok || dp == nil { + panic("EventDispatcher for " + name + " is not existing, make sure you have import the package.") + } + globalEventDispatcher = dispatchers[name]() + globalEventDispatcher.AddEventListeners(initEventListeners) +} + +// GetGlobalDispatcher +func GetGlobalDispatcher() observer.EventDispatcher { + return globalEventDispatcher +} + +// AddEventListener it will be added in global event dispatcher +func AddEventListener(listener observer.EventListener) { + initEventListeners = append(initEventListeners, listener) +} diff --git a/common/observer/dispatcher/direct_event_dispatcher.go b/common/observer/dispatcher/direct_event_dispatcher.go index b539ef92d5597d3f101bc2c3dbe3a768598ed015..2b7567b47ed40caa8867901ff0a05e0a2497cd31 100644 --- a/common/observer/dispatcher/direct_event_dispatcher.go +++ b/common/observer/dispatcher/direct_event_dispatcher.go @@ -22,12 +22,13 @@ import ( ) import ( + "github.com/apache/dubbo-go/common/extension" "github.com/apache/dubbo-go/common/logger" "github.com/apache/dubbo-go/common/observer" ) func init() { - observer.SetEventDispatcher("direct", NewDirectEventDispatcher) + extension.SetEventDispatcher("direct", NewDirectEventDispatcher) } // DirectEventDispatcher is align with DirectEventDispatcher interface in Java. diff --git a/common/observer/event_dispatcher.go b/common/observer/event_dispatcher.go index 8513818041b824645d97fbb39f0665d53b8798ae..17745e68c07065f954d456914fb276fadf6d975d 100644 --- a/common/observer/event_dispatcher.go +++ b/common/observer/event_dispatcher.go @@ -17,14 +17,6 @@ package observer -import ( - "github.com/apache/dubbo-go/common/logger" -) - -var globalEventDispatcher EventDispatcher - -var allEventListeners []EventListener - // EventDispatcher is align with EventDispatcher interface in Java. // it's the top abstraction // Align with 2.7.5 @@ -33,37 +25,3 @@ type EventDispatcher interface { // Dispatch event Dispatch(event Event) } - -var ( - dispatchers = make(map[string]func() EventDispatcher, 8) -) - -// SetEventDispatcher by name -func SetEventDispatcher(name string, v func() EventDispatcher) { - dispatchers[name] = v -} - -// SetAndInitGlobalDispatcher -func SetAndInitGlobalDispatcher(name string) { - if len(name) == 0 { - name = "direct" - } - if globalEventDispatcher != nil { - logger.Warnf("EventDispatcher already init. It will be replaced") - } - if dp, ok := dispatchers[name]; !ok || dp == nil { - panic("EventDispatcher for " + name + " is not existing, make sure you have import the package.") - } - globalEventDispatcher = dispatchers[name]() - globalEventDispatcher.AddEventListeners(allEventListeners) -} - -// GetGlobalDispatcher -func GetGlobalDispatcher() EventDispatcher { - return globalEventDispatcher -} - -// AddEventListener it will be added in global event dispatcher -func AddEventListener(listener EventListener) { - allEventListeners = append(allEventListeners, listener) -} diff --git a/config/config_loader.go b/config/config_loader.go index b2ae9d2cc31b2c1d9108a5dd6ef274c402856d38..50b6043ed6606d2f0db48837fe55b7acf5d050a1 100644 --- a/config/config_loader.go +++ b/config/config_loader.go @@ -33,7 +33,6 @@ 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/common/observer" _ "github.com/apache/dubbo-go/common/observer/dispatcher" ) @@ -102,7 +101,7 @@ func Load() { eventDispatcherType = providerConfig.eventDispatcherType } // init EventDispatcher should before everything - observer.SetAndInitGlobalDispatcher(eventDispatcherType) + extension.SetAndInitGlobalDispatcher(eventDispatcherType) // reference config if consumerConfig == nil { diff --git a/registry/listener/ServiceInstancesChangedListener.go b/registry/listener/ServiceInstancesChangedListener.go index 3e3a5283de8fbe9d8c5d2ca41d2a79fba40190ec..0ad66a4b1045e343b809e90f6d4b4a5675eaa25a 100644 --- a/registry/listener/ServiceInstancesChangedListener.go +++ b/registry/listener/ServiceInstancesChangedListener.go @@ -26,10 +26,6 @@ import ( "github.com/apache/dubbo-go/common/observer/event" ) -func init() { - observer.AddEventListener(&ServiceInstancesChangedListener{}) -} - // TODO (implement ConditionalEventListener) type ServiceInstancesChangedListener struct { observer.EventListener