1. 进一步封装 Redis pub/sub 的能力,简化编程难度

2. 数据字典的本地缓存刷新
This commit is contained in:
YunaiV
2021-01-23 10:56:34 +08:00
parent c10ab1753a
commit dc42f0f1bb
18 changed files with 232 additions and 35 deletions

View File

@@ -0,0 +1,29 @@
package cn.iocoder.dashboard.modules.system.mq.consumer.dict;
import cn.iocoder.dashboard.framework.redis.core.pubsub.AbstractChannelMessageListener;
import cn.iocoder.dashboard.modules.system.mq.message.dict.SysDictDataRefreshMessage;
import cn.iocoder.dashboard.modules.system.service.dict.SysDictDataService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
* 针对 {@link SysDictDataRefreshMessage} 的消费者
*
* @author 芋道源码
*/
@Component
@Slf4j
public class SysDictDataRefreshConsumer extends AbstractChannelMessageListener<SysDictDataRefreshMessage> {
@Resource
private SysDictDataService dictDataService;
@Override
public void onMessage(SysDictDataRefreshMessage message) {
log.info("[onMessage][收到 DictData 刷新消息]");
dictDataService.initLocalCache();
}
}

View File

@@ -1,6 +1,6 @@
package cn.iocoder.dashboard.modules.system.mq.consumer;
package cn.iocoder.dashboard.modules.system.mq.consumer.permission;
import cn.iocoder.dashboard.framework.redis.core.listener.AbstractMessageListener;
import cn.iocoder.dashboard.framework.redis.core.pubsub.AbstractChannelMessageListener;
import cn.iocoder.dashboard.modules.system.mq.message.permission.SysMenuRefreshMessage;
import cn.iocoder.dashboard.modules.system.service.permission.SysMenuService;
import lombok.extern.slf4j.Slf4j;
@@ -8,9 +8,14 @@ import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
* 针对 {@link SysMenuRefreshMessage} 的消费者
*
* @author 芋道源码
*/
@Component
@Slf4j
public class SysMenuRefreshConsumer extends AbstractMessageListener<SysMenuRefreshMessage> {
public class SysMenuRefreshConsumer extends AbstractChannelMessageListener<SysMenuRefreshMessage> {
@Resource
private SysMenuService menuService;
@@ -18,12 +23,7 @@ public class SysMenuRefreshConsumer extends AbstractMessageListener<SysMenuRefre
@Override
public void onMessage(SysMenuRefreshMessage message) {
log.info("[onMessage][收到 Menu 刷新消息]");
menuService.init();
}
@Override
public String getChannel() {
return SysMenuRefreshMessage.TOPIC;
menuService.initLocalCache();
}
}

View File

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

View File

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

View File

@@ -1,13 +1,17 @@
package cn.iocoder.dashboard.modules.system.mq.message.permission;
import cn.iocoder.dashboard.framework.redis.core.pubsub.ChannelMessage;
import lombok.Data;
/**
* 菜单数据刷新 Message
*/
@Data
public class SysMenuRefreshMessage {
public class SysMenuRefreshMessage implements ChannelMessage {
public static final String TOPIC = "system.menu.refresh";
@Override
public String getChannel() {
return "system.menu.refresh";
}
}

View File

@@ -0,0 +1,27 @@
package cn.iocoder.dashboard.modules.system.mq.producer.dict;
import cn.iocoder.dashboard.framework.redis.core.util.RedisMessageUtils;
import cn.iocoder.dashboard.modules.system.mq.message.dict.SysDictDataRefreshMessage;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
* DictData 字典数据相关消息的 Producer
*/
@Component
public class SysDictDataProducer {
@Resource
private StringRedisTemplate stringRedisTemplate;
/**
* 发送 {@link SysDictDataRefreshMessage} 消息
*/
public void sendMenuRefreshMessage() {
SysDictDataRefreshMessage message = new SysDictDataRefreshMessage();
RedisMessageUtils.sendChannelMessage(stringRedisTemplate, message);
}
}

View File

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

View File

@@ -1,7 +1,7 @@
package cn.iocoder.dashboard.modules.system.mq.producer.permission;
import cn.iocoder.dashboard.framework.redis.core.util.RedisMessageUtils;
import cn.iocoder.dashboard.modules.system.mq.message.permission.SysMenuRefreshMessage;
import cn.iocoder.dashboard.util.json.JSONUtils;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
@@ -21,7 +21,7 @@ public class SysMenuProducer {
*/
public void sendMenuRefreshMessage() {
SysMenuRefreshMessage message = new SysMenuRefreshMessage();
stringRedisTemplate.convertAndSend(SysMenuRefreshMessage.TOPIC, JSONUtils.toJSONString(message));
RedisMessageUtils.sendChannelMessage(stringRedisTemplate, message);
}
}