优化通知缓存处理

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)) .map(notifier -> new NotifierEventDispatcher<>(eventBus, notifier))
.flatMap(notifier -> Mono.justOrEmpty(notifiers.put(properties.getId(), notifier)) .flatMap(notifier -> Mono.justOrEmpty(notifiers.put(properties.getId(), notifier))
.flatMap(Notifier::close)//如果存在旧的通知器则关掉之 .flatMap(Notifier::close)//如果存在旧的通知器则关掉之
.onErrorContinue((err, obj) -> log.error(err.getMessage(), err))//忽略异常
.thenReturn(notifier)); .thenReturn(notifier));
} }

View File

@ -3,6 +3,7 @@ package org.jetlinks.community.notify.manager.service;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.hswebframework.web.crud.events.EntityDeletedEvent; import org.hswebframework.web.crud.events.EntityDeletedEvent;
import org.hswebframework.web.crud.events.EntityModifyEvent; 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.NotifierManager;
import org.jetlinks.community.notify.manager.entity.NotifyConfigEntity; import org.jetlinks.community.notify.manager.entity.NotifyConfigEntity;
import org.jetlinks.community.notify.manager.entity.NotifyTemplateEntity; 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.context.event.EventListener;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import reactor.core.publisher.Flux; import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import java.util.List; import java.util.List;
@ -26,40 +28,61 @@ public class NotifierCacheManager {
this.notifierManager = notifierManager; this.notifierManager = notifierManager;
} }
@EventListener
public void handleTemplateSave(EntitySavedEvent<NotifyTemplateEntity> event) {
event.async(
reloadTemplate(event.getEntity())
);
}
@EventListener @EventListener
public void handleTemplateModify(EntityModifyEvent<NotifyTemplateEntity> event) { public void handleTemplateModify(EntityModifyEvent<NotifyTemplateEntity> event) {
reloadTemplate(event.getBefore()); event.async(
reloadTemplate(event.getBefore())
);
} }
@EventListener @EventListener
public void handleTemplateDelete(EntityDeletedEvent<NotifyTemplateEntity> event) { 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 @EventListener
public void handleConfigModify(EntityModifyEvent<NotifyConfigEntity> event) { public void handleConfigModify(EntityModifyEvent<NotifyConfigEntity> event) {
reloadConfig(event.getBefore()); event.async(
reloadConfig(event.getBefore())
);
} }
@EventListener @EventListener
public void handleConfigDelete(EntityDeletedEvent<NotifyConfigEntity> event) { public void handleConfigDelete(EntityDeletedEvent<NotifyConfigEntity> event) {
reloadConfig(event.getEntity()); event.async(
reloadConfig(event.getEntity())
);
} }
protected void reloadConfig(List<NotifyConfigEntity> entities) { protected Mono<Void> reloadConfig(List<NotifyConfigEntity> entities) {
Flux.fromIterable(entities) return Flux.fromIterable(entities)
.map(NotifyConfigEntity::getId) .map(NotifyConfigEntity::getId)
.doOnNext(id -> log.info("clear notifier config [{}] cache", id)) .doOnNext(id -> log.info("clear notifier config [{}] cache", id))
.flatMap(notifierManager::reload) .flatMap(notifierManager::reload)
.subscribe(); .then();
} }
protected void reloadTemplate(List<NotifyTemplateEntity> entities) { protected Mono<Void> reloadTemplate(List<NotifyTemplateEntity> entities) {
Flux.fromIterable(entities) return Flux.fromIterable(entities)
.map(NotifyTemplateEntity::getId) .map(NotifyTemplateEntity::getId)
.doOnNext(id -> log.info("clear template [{}] cache", id)) .doOnNext(id -> log.info("clear template [{}] cache", id))
.flatMap(templateManager::reload) .flatMap(templateManager::reload)
.subscribe(); .then();
} }
} }