SpringBoot+Redis实现系统的发布订阅功能

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: SpringBoot+Redis实现系统的发布订阅功能

由于项目场景的实际情况(可能不需要那么所谓的专业消息中间件),以及开发团队对技术选型的讨论,为了不引入过多的中间件让系统的部署变得复杂,我们使用Redis实现了系统的消息发布订阅功能。实践证明Redis的消息发布订阅功能还是靠谱的。话不多说,直接上代码。

首先引入下面的依赖,让系统支持redis的功能。

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>

其次定义一个配置类,配置消息订阅的主题key,以及该key的消息被哪个消费类消费,比如下面的

MsgInfoConsumer,消费的方法是该类的onMessage方法。这就是消息发布订阅的消费方。

@ConfigurationpublicclassRedisListener {
@BeanRedisMessageListenerContainercontainer(RedisConnectionFactoryconnectionFactory,
MessageListenerAdaptermsgIngoListenerAdapter) {
RedisMessageListenerContainercontainer=newRedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
// 可以添加多个 messageListener,配置不同的交换机container.addMessageListener(msgIngoListenerAdapter, newPatternTopic("channel:MSGINFO"));
returncontainer;
    }
@BeanMessageListenerAdaptermsgIngoListenerAdapter(MsgInfoConsumerreceiver) {
returnnewMessageListenerAdapter(receiver, "onMessage");
    }
}
@ComponentpublicclassMsgInfoConsumer {
privatestaticfinalLoggerLOGGER=LoggerFactory.getLogger(MsgInfoConsumer.class);
publicvoidonMessage(Stringmessage){
try {
JSONObjectjsonObject=JSONObject.parseObject(message, JSONObject.class);
processMsg(jsonObject);
        }catch (Exceptione){
e.printStackTrace();
        }
    }
privatevoidprocessMsg(JSONObjectjsonObject){
//do something    }
}

定义完上述消费方,就是消息的生产方,生产方的代码很简单,主要是一行语句执行消息的发布

stringRedisTemplate.convertAndSend("channel:MSGINFO", JSON.toJSONString(obj));

至此就完成了消息的发布订阅功能。当然完整的功能还有很多,比如处理消息异常的数据,处理历史数据的消息的工作,这块大家可以通过分析数据以及写一些符合业务的代码去实现。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
18天前
|
存储 缓存 NoSQL
深入解析Redis:一种快速、高效的键值存储系统
**Redis** 是一款高性能的键值存储系统,以其内存数据、高效数据结构、持久化机制和丰富的功能在现代应用中占有一席之地。支持字符串、哈希、列表、集合和有序集合等多种数据结构,适用于缓存、计数、分布式锁和消息队列等场景。安装Redis涉及下载、编译和配置`redis.conf`。基本操作包括键值对的设置与获取,以及哈希、列表、集合和有序集合的操作。高级特性涵盖发布/订阅、事务处理和Lua脚本。优化策略包括选择合适数据结构、配置缓存和使用Pipeline。注意安全、监控和备份策略,以确保系统稳定和数据安全。
225 1
|
1天前
|
存储 缓存 NoSQL
Springboot中使用redisson + 自定义注解优雅的实现消息的发布订阅
Springboot中使用redisson + 自定义注解优雅的实现消息的发布订阅
|
7天前
|
小程序 JavaScript Java
基于SpringBoot+Vue+uniapp微信小程序的医院核酸检测服务系统的详细设计和实现
基于SpringBoot+Vue+uniapp微信小程序的医院核酸检测服务系统的详细设计和实现
31 0
|
7天前
|
人工智能 移动开发 前端开发
Springboot医院智慧导诊系统源码:精准推荐科室
医院智慧导诊系统是在医疗中使用的引导患者自助就诊挂号,在就诊的过程中有许多患者不知道需要挂什么号,要看什么病,通过智慧导诊系统,可输入自身疾病的症状表现,或选择身体部位,在经由智慧导诊系统多维度计算,精准推荐科室,引导患者挂号就诊,实现科学就诊,不用担心挂错号。
17 2
|
8天前
|
NoSQL 数据可视化 Java
Springboot整合redis
Springboot整合redis
|
8天前
|
人工智能 前端开发 Java
Java语言开发的AI智慧导诊系统源码springboot+redis 3D互联网智导诊系统源码
智慧导诊解决盲目就诊问题,减轻分诊工作压力。降低挂错号比例,优化就诊流程,有效提高线上线下医疗机构接诊效率。可通过人体画像选择症状部位,了解对应病症信息和推荐就医科室。
148 10
|
8天前
|
Java 关系型数据库 MySQL
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。一套UWB精确定位系统,最高定位精度可达10cm,具有高精度,高动态,高容量,低功耗的应用。
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
|
9天前
|
存储 数据可视化 安全
Java全套智慧校园系统源码springboot+elmentui +Quartz可视化校园管理平台系统源码 建设智慧校园的5大关键技术
智慧校园指的是以物联网为基础的智慧化的校园工作、学习和生活一体化环境,这个一体化环境以各种应用服务系统为载体,将教学、科研、管理和校园生活进行充分融合。无处不在的网络学习、融合创新的网络科研、透明高效的校务治理、丰富多彩的校园文化、方便周到的校园生活。简而言之,“要做一个安全、稳定、环保、节能的校园。
35 6
|
14天前
|
消息中间件 设计模式 缓存
Redis发布订阅:美丽的陷阱与不宜之境
Redis发布订阅:美丽的陷阱与不宜之境
45 1
|
18天前
|
NoSQL Java Redis
Springboot整合redis
Springboot整合redis