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

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
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
目录
相关文章
|
13天前
|
NoSQL Java Redis
Springboot使用Redis实现分布式锁
通过这些步骤和示例,您可以系统地了解如何在Spring Boot中使用Redis实现分布式锁,并在实际项目中应用。希望这些内容对您的学习和工作有所帮助。
138 83
|
4月前
|
Java 开发者 微服务
手写模拟Spring Boot自动配置功能
【11月更文挑战第19天】随着微服务架构的兴起,Spring Boot作为一种快速开发框架,因其简化了Spring应用的初始搭建和开发过程,受到了广大开发者的青睐。自动配置作为Spring Boot的核心特性之一,大大减少了手动配置的工作量,提高了开发效率。
83 0
|
22天前
|
NoSQL Redis 数据库
Redis 功能扩展 Lua 脚本 对Redis扩展 eval redis.call redis.pcall
通过本文的介绍,我们详细讲解了 Lua 脚本在 Redis 中的作用、`eval` 命令的使用方法以及 `redis.call` 和 `redis.pcall` 的区别和用法。通过合理使用 Lua 脚本,可以实现复杂的业务逻辑,确保操作的原子性,并减少网络开销,从而提高系统的性能和可靠性。
62 13
|
2月前
基于springboot+thymeleaf+Redis仿知乎网站问答项目源码
基于springboot+thymeleaf+Redis仿知乎网站问答项目源码
161 36
|
2月前
|
前端开发 JavaScript Java
springboot图书馆管理系统前后端分离版本
springboot图书馆管理系统前后端分离版本
43 12
|
2月前
|
JavaScript NoSQL Java
基于SpringBoot+Vue实现的大学生就业服务平台设计与实现(系统源码+文档+数据库+部署等)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
84 6
|
2月前
|
JavaScript Java 测试技术
基于Java+SpringBoot+Vue实现的车辆充电桩系统设计与实现(系统源码+文档+部署讲解等)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
66 6
|
2月前
|
JavaScript NoSQL Java
基于SpringBoot+Vue的班级综合测评管理系统设计与实现(系统源码+文档+数据库+部署等)
✌免费选题、功能需求设计、任务书、开题报告、中期检查、程序功能实现、论文辅导、论文降重、答辩PPT辅导、会议视频一对一讲解代码等✌
54 4
|
2月前
|
JavaScript NoSQL Java
基于SpringBoot+Vue实现的大学生体质测试管理系统设计与实现(系统源码+文档+数据库+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
46 2
|
2月前
|
存储 安全 Java
Spring Boot 3 集成Spring AOP实现系统日志记录
本文介绍了如何在Spring Boot 3中集成Spring AOP实现系统日志记录功能。通过定义`SysLog`注解和配置相应的AOP切面,可以在方法执行前后自动记录日志信息,包括操作的开始时间、结束时间、请求参数、返回结果、异常信息等,并将这些信息保存到数据库中。此外,还使用了`ThreadLocal`变量来存储每个线程独立的日志数据,确保线程安全。文中还展示了项目实战中的部分代码片段,以及基于Spring Boot 3 + Vue 3构建的快速开发框架的简介与内置功能列表。此框架结合了当前主流技术栈,提供了用户管理、权限控制、接口文档自动生成等多项实用特性。
93 8