当前位置: 首页 > news >正文

Spring Boot 集成 Redis 发布订阅实现消息通信

在分布式系统中,服务间的通信是一个常见需求。Redis 作为一款高性能的内存数据库,提供了发布订阅(Pub/Sub)功能,可用于实现简单高效的消息通信。本文将结合实际代码案例,详细介绍如何在 Spring Boot 项目中集成 Redis 发布订阅功能。

Redis 发布订阅简介

Redis 发布订阅是一种消息通信模式:

  • 发布者(Publisher):发送消息的一方,将消息发布到指定主题(Topic)
  • 订阅者(Subscriber):接收消息的一方,订阅感兴趣的主题
  • 主题(Topic):消息的分类标识,发布者按主题发送,订阅者按主题接收

这种模式的优势在于解耦了消息的发送者和接收者,双方无需知道对方的存在,只需关注消息本身。

项目实战:实现 Redis 发布订阅

消息发布实现

发布消息非常简单,通过 RedisTemplate 的 convertAndSend 方法即可:

// 发布消息到指定主题
redisTemplate.convertAndSend(GlobalConstants.MATERIAL_TO_UPGRADE_TOPIC, materialInfoVO);
  • 第一个参数:主题名称(GlobalConstants.MATERIAL_TO_UPGRADE_TOPIC)
  • 第二个参数:要发送的消息对象(materialInfoVO)

订阅端配置

订阅端需要进行相应配置才能接收消息,主要包括监听器容器、消息适配器和消息处理器。

Redis 订阅配置类

package com.abupdate.vota.upgrade.config;import com.abupdate.vota.upgrade.constant.PackageConstant;
import com.abupdate.vota.upgrade.listener.MessageReceive;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.listener.PatternTopic;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.data.redis.listener.adapter.MessageListenerAdapter;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;/*** <p> redis 发布订阅配置类</p>** @author bu.junjie* @version 1.0.0* @createTime 2023-08-04 10:50*/
@Configuration
public class RedisSubscribeConfig {/*** redis消息监听器容器* 可以添加多个监听不同话题的redis监听器,通过反射调用消息订阅处理器的方法** @param connectionFactory Redis连接工厂* @param listenerAdapter 消息监听器适配器* @return RedisMessageListenerContainer*/@Beanpublic RedisMessageListenerCo
http://www.xdnf.cn/news/1339093.html

相关文章:

  • 计算机网络技术学习-day6《三层交换机配置》
  • 01 网络信息内容安全--绪论
  • 2025.7.19卡码刷题-回溯算法-组合
  • Web 安全之 HTTP 响应截断攻击详解
  • 数据结构初阶:排序算法(三)归并排序、计数排序
  • 【数据结构】深入解析选择排序与堆排序:从基础到高效实现的完全指南
  • 深度卷积神经网络AlexNet
  • openEuler系统中r如何将docker安装在指定目录
  • 神经网络中 标量求导和向量求导
  • 如何通过传感器选型优化,为设备寿命 “续航”?
  • 机器学习6
  • RootDB:一款开源免费的Web报表工具
  • 0821 sqlite3_get_table函数(数据库函数的补充)
  • Vue.js 中使用 Highcharts 构建响应式图表 - 综合指南
  • 遥感机器学习入门实战教程|Sklearn案例⑤:集成学习方法全览
  • Python学习-- 数据库和MySQL入门
  • CentOS 7常用国内源配置:阿里云、腾讯云、华为云、清华源
  • pycharm编译器如何快速掌握一个新模块的使用方法
  • JeeSite 快速开发平台:全能企业级快速开发解决方案
  • 【图像算法 - 20】慧眼识病:基于深度学习与OpenCV的植物叶子疾病智能识别系统
  • Python-Pandas GroupBy 进阶与透视表学习
  • 中国之路 向善而行 第三届全国自驾露营旅游发展大会在阿拉善启幕
  • Android14内核调试 - boot vendor_boot
  • 06高级语言逻辑结构到汇编语言之逻辑结构转换 for (...; ...; ...)
  • uni-app:实现文本框的自动换行
  • Android - 资源类型 MINE Type
  • 教育场景下禁用html5播放器拖动进度条的例子
  • 医疗信息化实战:引领医疗行业数字化转型实践
  • 华为AUTOSAR质量目标与开发实践
  • FCN网络结构讲解与Pytorch逐行讲解实现