From 94bd327705d6d06cd0c6e9b2cc6f7be7ebce3d40 Mon Sep 17 00:00:00 2001 From: Patrick <dreamlike.sky@foxmail.com> Date: Fri, 10 Apr 2020 17:58:44 +0800 Subject: [PATCH] move global dispatcher to extension package --- common/extension/event_dispatcher.go | 61 +++++++++++++++++++ .../dispatcher/direct_event_dispatcher.go | 3 +- common/observer/event_dispatcher.go | 42 ------------- config/config_loader.go | 3 +- .../ServiceInstancesChangedListener.go | 4 -- 5 files changed, 64 insertions(+), 49 deletions(-) create mode 100644 common/extension/event_dispatcher.go diff --git a/common/extension/event_dispatcher.go b/common/extension/event_dispatcher.go new file mode 100644 index 000000000..3f7fcee17 --- /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 b539ef92d..2b7567b47 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 851381804..17745e68c 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 b2ae9d2cc..50b6043ed 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 3e3a5283d..0ad66a4b1 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 -- GitLab