From 8fe56b6dc7d78b4590d4e8429b5d1a8eb496012d Mon Sep 17 00:00:00 2001 From: chentong Date: Sun, 28 Sep 2025 20:10:12 +0800 Subject: [PATCH] fix(eventbus): update error handler to include topic information (#333) * fix(eventbus): update error handler to include topic information - Modified error handler signature to accept topic string and error - Updated panic recovery logic to pass event topic to error handler - Adjusted SetErrorHandler method parameter signature - Updated example test to demonstrate new error handler usage - Enhanced error handling test to verify topic information * fix(eventbus): unit test --- eventbus/eventbus.go | 6 +++--- eventbus/eventbus_example_test.go | 6 +++--- eventbus/eventbus_test.go | 3 ++- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/eventbus/eventbus.go b/eventbus/eventbus.go index 8fe9b25..e616a7f 100644 --- a/eventbus/eventbus.go +++ b/eventbus/eventbus.go @@ -21,7 +21,7 @@ type EventBus[T any] struct { // listeners map[string][]*EventListener[T] listeners sync.Map mu sync.RWMutex - errorHandler func(err error) + errorHandler func(topic string, err error) } // EventListener is the struct that holds the listener function and its priority. @@ -117,7 +117,7 @@ func (eb *EventBus[T]) Publish(event Event[T]) { func (eb *EventBus[T]) publishToListener(listener *EventListener[T], event Event[T]) { defer func() { if r := recover(); r != nil && eb.errorHandler != nil { - eb.errorHandler(fmt.Errorf("%v", r)) + eb.errorHandler(event.Topic, fmt.Errorf("%v", r)) } }() @@ -126,7 +126,7 @@ func (eb *EventBus[T]) publishToListener(listener *EventListener[T], event Event // SetErrorHandler sets the error handler function. // Play: https://go.dev/play/p/gmB0gnFe5mc -func (eb *EventBus[T]) SetErrorHandler(handler func(err error)) { +func (eb *EventBus[T]) SetErrorHandler(handler func(topic string, err error)) { eb.errorHandler = handler } diff --git a/eventbus/eventbus_example_test.go b/eventbus/eventbus_example_test.go index cac6d8c..e6fc749 100644 --- a/eventbus/eventbus_example_test.go +++ b/eventbus/eventbus_example_test.go @@ -189,8 +189,8 @@ func ExampleEventBus_GetListenersCount() { func ExampleEventBus_SetErrorHandler() { eb := NewEventBus[int]() - eb.SetErrorHandler(func(err error) { - fmt.Println(err) + eb.SetErrorHandler(func(topic string, err error) { + fmt.Println(topic, err) }) eb.Subscribe("event1", func(eventData int) { @@ -200,7 +200,7 @@ func ExampleEventBus_SetErrorHandler() { eb.Publish(Event[int]{Topic: "event1", Payload: 1}) // Output: - // error + // event1 error } func ExampleEventBus_GetAllListenersCount() { diff --git a/eventbus/eventbus_test.go b/eventbus/eventbus_test.go index dc90ca4..7d232bc 100644 --- a/eventbus/eventbus_test.go +++ b/eventbus/eventbus_test.go @@ -114,7 +114,8 @@ func TestEventBus_ErrorHandler(t *testing.T) { eb := NewEventBus[string]() - eb.SetErrorHandler(func(err error) { + eb.SetErrorHandler(func(topic string, err error) { + assert.Equal("event1", topic) assert.Equal("error", err.Error()) })