1. 配置的缓存刷新机制

This commit is contained in:
YunaiV
2021-01-23 13:25:25 +08:00
parent 7813c4019a
commit 545e9d2a0f
14 changed files with 116 additions and 16 deletions

View File

@ -0,0 +1,24 @@
package cn.iocoder.dashboard.modules.infra.mq.consumer.config;
import cn.iocoder.dashboard.framework.apollo.internals.DBConfigRepository;
import cn.iocoder.dashboard.framework.redis.core.pubsub.AbstractChannelMessageListener;
import cn.iocoder.dashboard.modules.infra.mq.message.config.InfConfigRefreshMessage;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
/**
* 针对 {@link InfConfigRefreshMessage} 的消费者
*
* @author 芋道源码
*/
@Component
@Slf4j
public class InfConfigRefreshConsumer extends AbstractChannelMessageListener<InfConfigRefreshMessage> {
@Override
public void onMessage(InfConfigRefreshMessage message) {
log.info("[onMessage][收到 Config 刷新消息]");
DBConfigRepository.noticeSync();
}
}

View File

@ -0,0 +1 @@
package cn.iocoder.dashboard.modules.infra.mq.consumer;

View File

@ -0,0 +1,17 @@
package cn.iocoder.dashboard.modules.infra.mq.message.config;
import cn.iocoder.dashboard.framework.redis.core.pubsub.ChannelMessage;
import lombok.Data;
/**
* 配置数据刷新 Message
*/
@Data
public class InfConfigRefreshMessage implements ChannelMessage {
@Override
public String getChannel() {
return "infra.config.refresh";
}
}

View File

@ -0,0 +1 @@
package cn.iocoder.dashboard.modules.infra.mq.message;

View File

@ -0,0 +1,27 @@
package cn.iocoder.dashboard.modules.infra.mq.producer.config;
import cn.iocoder.dashboard.framework.redis.core.util.RedisMessageUtils;
import cn.iocoder.dashboard.modules.infra.mq.message.config.InfConfigRefreshMessage;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
* Config 配置相关消息的 Producer
*/
@Component
public class InfConfigProducer {
@Resource
private StringRedisTemplate stringRedisTemplate;
/**
* 发送 {@link InfConfigRefreshMessage} 消息
*/
public void sendConfigRefreshMessage() {
InfConfigRefreshMessage message = new InfConfigRefreshMessage();
RedisMessageUtils.sendChannelMessage(stringRedisTemplate, message);
}
}

View File

@ -0,0 +1 @@
package cn.iocoder.dashboard.modules.infra.mq.producer;

View File

@ -10,6 +10,7 @@ import cn.iocoder.dashboard.modules.infra.convert.config.InfConfigConvert;
import cn.iocoder.dashboard.modules.infra.dal.mysql.dao.config.InfConfigMapper;
import cn.iocoder.dashboard.modules.infra.dal.mysql.dataobject.config.InfConfigDO;
import cn.iocoder.dashboard.modules.infra.enums.config.InfConfigTypeEnum;
import cn.iocoder.dashboard.modules.infra.mq.producer.config.InfConfigProducer;
import cn.iocoder.dashboard.modules.infra.service.config.InfConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@ -30,6 +31,9 @@ public class InfConfigServiceImpl implements InfConfigService {
@Resource
private InfConfigMapper configMapper;
@Resource
private InfConfigProducer configProducer;
@Override
public PageResult<InfConfigDO> getConfigPage(InfConfigPageReqVO reqVO) {
return configMapper.selectPage(reqVO);
@ -58,6 +62,8 @@ public class InfConfigServiceImpl implements InfConfigService {
InfConfigDO config = InfConfigConvert.INSTANCE.convert(reqVO);
config.setType(InfConfigTypeEnum.CUSTOM.getType());
configMapper.insert(config);
// 发送刷新消息
configProducer.sendConfigRefreshMessage();
return config.getId();
}
@ -68,6 +74,8 @@ public class InfConfigServiceImpl implements InfConfigService {
// 更新参数配置
InfConfigDO updateObj = InfConfigConvert.INSTANCE.convert(reqVO);
configMapper.updateById(updateObj);
// 发送刷新消息
configProducer.sendConfigRefreshMessage();
}
@Override
@ -80,6 +88,8 @@ public class InfConfigServiceImpl implements InfConfigService {
}
// 删除
configMapper.deleteById(id);
// 发送刷新消息
configProducer.sendConfigRefreshMessage();
}
private void checkCreateOrUpdate(Long id, String key) {
@ -113,4 +123,5 @@ public class InfConfigServiceImpl implements InfConfigService {
throw ServiceExceptionUtil.exception(CONFIG_NAME_DUPLICATE);
}
}
}