diff --git a/jetlinks-components/notify-component/notify-core/src/main/java/org/jetlinks/community/notify/DefaultNotifierManager.java b/jetlinks-components/notify-component/notify-core/src/main/java/org/jetlinks/community/notify/DefaultNotifierManager.java index 575085e7..87e3c06a 100644 --- a/jetlinks-components/notify-component/notify-core/src/main/java/org/jetlinks/community/notify/DefaultNotifierManager.java +++ b/jetlinks-components/notify-component/notify-core/src/main/java/org/jetlinks/community/notify/DefaultNotifierManager.java @@ -49,7 +49,6 @@ public class DefaultNotifierManager implements NotifierManager, BeanPostProcesso .map(notifier -> new NotifierEventDispatcher<>(eventBus, notifier)) .flatMap(notifier -> Mono.justOrEmpty(notifiers.put(properties.getId(), notifier)) .flatMap(Notifier::close)//如果存在旧的通知器则关掉之 - .onErrorContinue((err, obj) -> log.error(err.getMessage(), err))//忽略异常 .thenReturn(notifier)); } diff --git a/jetlinks-manager/notify-manager/src/main/java/org/jetlinks/community/notify/manager/service/NotifierCacheManager.java b/jetlinks-manager/notify-manager/src/main/java/org/jetlinks/community/notify/manager/service/NotifierCacheManager.java index f498a125..74d494c6 100644 --- a/jetlinks-manager/notify-manager/src/main/java/org/jetlinks/community/notify/manager/service/NotifierCacheManager.java +++ b/jetlinks-manager/notify-manager/src/main/java/org/jetlinks/community/notify/manager/service/NotifierCacheManager.java @@ -3,6 +3,7 @@ package org.jetlinks.community.notify.manager.service; import lombok.extern.slf4j.Slf4j; import org.hswebframework.web.crud.events.EntityDeletedEvent; import org.hswebframework.web.crud.events.EntityModifyEvent; +import org.hswebframework.web.crud.events.EntitySavedEvent; import org.jetlinks.community.notify.NotifierManager; import org.jetlinks.community.notify.manager.entity.NotifyConfigEntity; import org.jetlinks.community.notify.manager.entity.NotifyTemplateEntity; @@ -10,6 +11,7 @@ import org.jetlinks.community.notify.template.TemplateManager; import org.springframework.context.event.EventListener; import org.springframework.stereotype.Component; import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; import java.util.List; @@ -26,40 +28,61 @@ public class NotifierCacheManager { this.notifierManager = notifierManager; } + @EventListener + public void handleTemplateSave(EntitySavedEvent event) { + event.async( + reloadTemplate(event.getEntity()) + ); + } + @EventListener public void handleTemplateModify(EntityModifyEvent event) { - reloadTemplate(event.getBefore()); + event.async( + reloadTemplate(event.getBefore()) + ); } @EventListener public void handleTemplateDelete(EntityDeletedEvent event) { - reloadTemplate(event.getEntity()); + event.async( + reloadTemplate(event.getEntity()) + ); + } + @EventListener + public void handleConfigSave(EntitySavedEvent event) { + event.async( + reloadConfig(event.getEntity()) + ); } @EventListener public void handleConfigModify(EntityModifyEvent event) { - reloadConfig(event.getBefore()); + event.async( + reloadConfig(event.getBefore()) + ); } @EventListener public void handleConfigDelete(EntityDeletedEvent event) { - reloadConfig(event.getEntity()); + event.async( + reloadConfig(event.getEntity()) + ); } - protected void reloadConfig(List entities) { - Flux.fromIterable(entities) - .map(NotifyConfigEntity::getId) - .doOnNext(id -> log.info("clear notifier config [{}] cache", id)) - .flatMap(notifierManager::reload) - .subscribe(); + protected Mono reloadConfig(List entities) { + return Flux.fromIterable(entities) + .map(NotifyConfigEntity::getId) + .doOnNext(id -> log.info("clear notifier config [{}] cache", id)) + .flatMap(notifierManager::reload) + .then(); } - protected void reloadTemplate(List entities) { - Flux.fromIterable(entities) - .map(NotifyTemplateEntity::getId) - .doOnNext(id -> log.info("clear template [{}] cache", id)) - .flatMap(templateManager::reload) - .subscribe(); + protected Mono reloadTemplate(List entities) { + return Flux.fromIterable(entities) + .map(NotifyTemplateEntity::getId) + .doOnNext(id -> log.info("clear template [{}] cache", id)) + .flatMap(templateManager::reload) + .then(); } }