问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Spring Boot使用Redis进行消息的发布订阅 原创

发布网友 发布时间:2022-10-13 23:48

我来回答

1个回答

热心网友 时间:2023-11-18 05:56

/**

* Redis 相关的配置,包含推送,以及对象编码的定义

*/

@Configuration

public class RedisConfig {

public @Bean

RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) {

RedisTemplate template = new RedisTemplate>();

template.setConnectionFactory(connectionFactory);

template.setDefaultSerializer(new GenericJackson2JsonRedisSerializer());

template.setKeySerializer(new StringRedisSerializer());

template.setHashKeySerializer(new GenericJackson2JsonRedisSerializer());

template.setValueSerializer(new GenericJackson2JsonRedisSerializer());

return template;

}

@Bean

ChannelTopic topic() {

return new ChannelTopic("messageQueue");

}

@Bean

RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,

MessageListenerAdapter listenerAdapter) {

RedisMessageListenerContainer container = new RedisMessageListenerContainer();

container.setConnectionFactory(connectionFactory);

container.addMessageListener(listenerAdapter, new PatternTopic("messageQueue"));

return container;

}

@Bean

MessageListenerAdapter listenerAdapter(Receiver receiver) {

return new MessageListenerAdapter(receiver, "receiveMessage");

}

}

public enum BusinessTypeEnum {

//修改SystemConfig缓存

UPDATE_SYSTEM_CONFIG;

}

//发布者接口

public interface MessagePublisher {

void publish(String message);

}

@Component

public class RedisMessagePublisher implements MessagePublisher{

private final static Logger logger = LoggerFactory.getLogger(RedisMessagePublisher.class);

@Autowired

private RedisTemplate redisTemplate;

@Autowired

private ChannelTopic topic;

@Override

public void publish(String message) {

logger.info("推送信息:"+message);

redisTemplate.convertAndSend(topic.getTopic(), message);

}

}

public interface Receiver { void receiveMessage(String message); }

@Component

public class MessageReceiver implements Receiver {

private final static Logger logger = LoggerFactory.getLogger(MessageReceiver.class);

@Autowired

private ISystemConfigService systemConfigService;

@Override

public void receiveMessage(String message) {

logger.info("消息接收:"+message);

JSONObject object = JSONObject.parseObject(message);

String businessType = object.getString("businessType");

logger.info("处理业务类型:businessType="+businessType);

if(BusinessTypeEnum.UPDATE_SYSTEM_CONFIG.toString().equals(businessType)){//处理SystemConfig缓存

String jsonStr = object.getString("jsonStr");

if(jsonStr!=null&&!"".equals(jsonStr)){

JSONObject json = JSONObject.parseObject(object.getString("jsonStr"));

for(String key:json.keySet()){

String value = json.getString(key);

SystemConfig systemConfig = SystemConfigContainer.instance().getSystemConfig(key);

if(systemConfig!=null){

systemConfig.setKeyValue(value);

SystemConfigContainer.instance().uptSystemConfig(systemConfig);

}else{

systemConfig = systemConfigService.selectByPrimaryJianMing(key);

systemConfig.setKeyValue(value);

SystemConfigContainer.instance().uptSystemConfig(systemConfig);

}

}

}

}

}

}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
PCR有哪些分类? 不鸣则已 一鸣惊人的三个星座 电动车加装蓝牙音箱怎么接线 怎么把QQ同步助手卸载掉?简直就是垃圾,什么没操作就直接给安装上了,怎... 怎么把QQ同步助手卸载掉?简直就是流氓软件。什么东西没经过我点‘’同 ... excel表如何将相间隔的不同两行组合在一起,成为一行? excel工作表如何对行各自组合 考科目一自己去还是驾校统一去 科目一是自己考还是在驾校 社保转移后,新单位没要转移单,只要了身份证,是不是就可以办理了 什么是社保转移 lol生化魔人怎么改色教学 普瑞维亚afsoff怎么关掉 蓝天救援队的肩章有没有级别? 熊出没经典台词 祈福的意思 祈福的意思是什么 参考资料 - 西游记每回内容概括 决战平安京账号等级最高多少 小虾米是晒干的好还是烘干的好 小虾米怎么吃比较好 现在所有的冰箱都是无氟的吗 西游记的内容概括 滚筒机每次开门时总是味道很大怎么办? 42天 减肥 20斤 42天的月子期俗称减脂黄金期,要如何把握住这个时期? 綦航钢结构招工查两对半吗? 重庆綦航钢结构工程有限公司怎么样? 宝宝一到半夜就不肯睡觉了,该怎么办?如何调整他的睡眠习惯呢? 家居卫生间风水禁忌有哪些 家居卫生间风水有什么禁忌 家居卫生间风水禁忌有哪些 藏族民间舞蹈的特点 世界上公认的弟一张抽象艺术作品是什么 springboot项目集成 redis详解 in a couples of days 提问in a couple of days用什么 防腐材料,太阳能薄膜,芯片:石墨烯,还有什么你不能做的? 中华健行医疗保险元宝是真的吗 金元宝b分红型两全保险可靠吗 金元宝两全保险怎么样?? 想在郑州学习网络营销,听朋友介绍,郑州青云学院怎么样? 郑州北大青鸟分享如何学习网络推广? 想学电子商务郑州有哪些好的学校? 地磅哪个牌子好 什么样的地磅才是好地磅 2L三极管开关管问题 贴片3极管:2L怎么测好坏 贴片y2是什么管 电动车充电器电路板输出端有线剪断了,连着2l三极管的中间一个脚。可以把他连起来么? 什么叫ERP 和 DIY 阴阳三合九重八柱十二分图,其中三合、九重、八柱指? oa 可以diy吗 cmp 是协同管理平台吗,有没有可以diy的cmp或oa系统啊 想做一个学校师生档案管理系统,市场上大多已做好,不好满足需求,寻求一款好用的,能自己DIY的管理软件