浏览代码

优化通知缓存处理

zhou-hao 4 年之前
父节点
当前提交
2227defc5f

+ 0 - 1
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));
     }
 

+ 39 - 16
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<NotifyTemplateEntity> event) {
+        event.async(
+            reloadTemplate(event.getEntity())
+        );
+    }
+
     @EventListener
     public void handleTemplateModify(EntityModifyEvent<NotifyTemplateEntity> event) {
-        reloadTemplate(event.getBefore());
+        event.async(
+            reloadTemplate(event.getBefore())
+        );
     }
 
     @EventListener
     public void handleTemplateDelete(EntityDeletedEvent<NotifyTemplateEntity> event) {
-        reloadTemplate(event.getEntity());
+        event.async(
+            reloadTemplate(event.getEntity())
+        );
+    }
+    @EventListener
+    public void handleConfigSave(EntitySavedEvent<NotifyConfigEntity> event) {
+        event.async(
+            reloadConfig(event.getEntity())
+        );
     }
 
     @EventListener
     public void handleConfigModify(EntityModifyEvent<NotifyConfigEntity> event) {
-        reloadConfig(event.getBefore());
+        event.async(
+            reloadConfig(event.getBefore())
+        );
     }
 
     @EventListener
     public void handleConfigDelete(EntityDeletedEvent<NotifyConfigEntity> event) {
-        reloadConfig(event.getEntity());
+        event.async(
+            reloadConfig(event.getEntity())
+        );
     }
 
-    protected void reloadConfig(List<NotifyConfigEntity> entities) {
-        Flux.fromIterable(entities)
-                .map(NotifyConfigEntity::getId)
-                .doOnNext(id -> log.info("clear notifier config [{}] cache", id))
-                .flatMap(notifierManager::reload)
-                .subscribe();
+    protected Mono<Void> reloadConfig(List<NotifyConfigEntity> 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<NotifyTemplateEntity> entities) {
-        Flux.fromIterable(entities)
-                .map(NotifyTemplateEntity::getId)
-                .doOnNext(id -> log.info("clear template [{}] cache", id))
-                .flatMap(templateManager::reload)
-                .subscribe();
+    protected Mono<Void> reloadTemplate(List<NotifyTemplateEntity> entities) {
+        return Flux.fromIterable(entities)
+                   .map(NotifyTemplateEntity::getId)
+                   .doOnNext(id -> log.info("clear template [{}] cache", id))
+                   .flatMap(templateManager::reload)
+                   .then();
     }
 
 }