优化通知缓存处理

This commit is contained in:
zhou-hao 2020-12-01 16:12:44 +08:00
parent 33dc75439d
commit 2227defc5f
2 changed files with 39 additions and 17 deletions

View File

@ -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));
}

View File

@ -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();
}
}