From ab0007c54a104ea5acb80ae90b2b136d3f7bf378 Mon Sep 17 00:00:00 2001 From: luca Date: Wed, 5 Jun 2024 16:45:05 +0800 Subject: [PATCH] feat[event]: support exception handle for event --- .../main/java/com/zfoo/event/manager/EventBus.java | 12 +++++++++--- event/src/main/java/com/zfoo/event/model/IEvent.java | 12 ++++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/event/src/main/java/com/zfoo/event/manager/EventBus.java b/event/src/main/java/com/zfoo/event/manager/EventBus.java index c68ad384..c7ccf2ad 100644 --- a/event/src/main/java/com/zfoo/event/manager/EventBus.java +++ b/event/src/main/java/com/zfoo/event/manager/EventBus.java @@ -59,7 +59,9 @@ public abstract class EventBus { /** * event exception handler */ - public static BiConsumer exceptionFunction = (receiver, event) -> {}; + public static TriConsumer exceptionFunction = (receiver, event, throwable) -> { + event.exceptionHandle(receiver, throwable); + }; public static Consumer noReceiverFunction = event -> {}; static { @@ -122,11 +124,15 @@ public abstract class EventBus { try { receiver.invoke(event); } catch (Throwable t) { - logger.error("eventBus {} [{}] unknown error", receiver.bus(), event.getClass().getSimpleName(), t); - exceptionFunction.accept(receiver, event); + exceptionFunction.accept(receiver, event, t); } } + @FunctionalInterface + public interface TriConsumer { + void accept(T t, U u, V v); + } + public static void asyncExecute(Runnable runnable) { asyncExecute(RandomUtils.randomInt(), runnable); } diff --git a/event/src/main/java/com/zfoo/event/model/IEvent.java b/event/src/main/java/com/zfoo/event/model/IEvent.java index 8edc1aee..427cf452 100644 --- a/event/src/main/java/com/zfoo/event/model/IEvent.java +++ b/event/src/main/java/com/zfoo/event/model/IEvent.java @@ -12,12 +12,16 @@ package com.zfoo.event.model; +import com.zfoo.event.enhance.IEventReceiver; import com.zfoo.protocol.util.RandomUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * @author godotg */ public interface IEvent { + Logger logger = LoggerFactory.getLogger(IEvent.class); /** * 这个返回的是一个用于确定事件在EventBus中的哪个线程池的执行的一个参数,只有异步事件才会有作用 @@ -39,4 +43,12 @@ public interface IEvent { return RandomUtils.randomInt(); } + /** + * 处理事件的异常 + * @param receiver IEventReceiver + * @param throwable Throwable + */ + default void exceptionHandle(IEventReceiver receiver, Throwable throwable) { + logger.error("eventBus {} [{}] unknown error", receiver.bus(), this.getClass().getSimpleName(), throwable); + } }