diff --git a/polaris-discovery/polaris-discovery-client/src/main/java/com/tencent/polaris/discovery/client/flow/WatchFlow.java b/polaris-discovery/polaris-discovery-client/src/main/java/com/tencent/polaris/discovery/client/flow/WatchFlow.java index de8a1d59b..60f34d397 100644 --- a/polaris-discovery/polaris-discovery-client/src/main/java/com/tencent/polaris/discovery/client/flow/WatchFlow.java +++ b/polaris-discovery/polaris-discovery-client/src/main/java/com/tencent/polaris/discovery/client/flow/WatchFlow.java @@ -56,7 +56,7 @@ */ public class WatchFlow { - private static final Logger LOG = LoggerFactory.getLogger(SyncFlow.class); + private static final Logger LOG = LoggerFactory.getLogger(WatchFlow.class); private static final Logger UPDATE_EVENT_LOG = LoggerFactory.getLogger(LOGGING_UPDATE_EVENT_ASYNC); private static final Map> watchers = new ConcurrentHashMap<>(); private final AtomicBoolean initialize = new AtomicBoolean(false); @@ -90,7 +90,13 @@ public WatchServiceResponse commonWatchService(CommonWatchServiceRequest request .addInstances(Arrays.asList(response.getInstances())) .allInstances(Arrays.asList(response.getInstances())).build(); firstAddedListeners.forEach( - serviceListener -> executor.execute(event.getServiceKey(), () -> serviceListener.onEvent(event))); + serviceListener -> executor.execute(event.getServiceKey(), () -> { + try { + serviceListener.onEvent(event); + } catch (Throwable e) { + LOG.error("Notify error When listener is first added, service key:{}, event:{}", event.getServiceKey(), event, e); + } + })); } boolean result = existListeners.addAll(addListeners); return new WatchServiceResponse(response, result); @@ -168,7 +174,11 @@ private class InstanceChangeListener extends AbstractResourceEventListener { private final BiConsumer consumer = (event, listener) -> { WatchFlow.this.executor.execute(event.getServiceKey(), () -> { - listener.onEvent(event); + try { + listener.onEvent(event); + } catch (Throwable e) { + LOG.error("Notify error, service key:{}, event:{}", event.getServiceKey(), event, e); + } }); };