Spring-redis消息的订阅与发布

【Spring Boot 3】【Redis】消息发布及订阅 Redis常见用途包括被用作分布式环境中的消息队列服务,本文介绍开发Spring Boot应用时借助Spring Data Redis实现消息的发布及订阅。:定时发布消息。:订阅消息。虽然使用Redis可是实现分布式环境下的消息发布及订阅功能,但这仅适用于较为简单的应用场景,复杂场景下还是建议多考虑专用的MQ产品,如Kafka、RabbitMQ、RocketMQ等。 阅读详情

消息发布与订阅概述

消息订阅发布模型如图所示

消息生产者负责消息的发布,通过约定的通信方式,让消费者消费相应的消息。下面使用redis简单了实现了消息的订阅与发布。

1.消息的订阅方

1.1配置文件

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:redis="http://www.springframework.org/schema/redis"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://www.springframework.org/schema/redis
       http://www.springframework.org/schema/redis/spring-redis-1.0.xsd">

    <bean id="redisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
          p:hostName="localhost" p:port="6379" p:usePool="true">
    </bean>

    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"
          p:connectionFactory-ref="redisConnectionFactory"/>
    <bean id="redisDAO" class="redis.springredis.daoimpl.RedisDAOImpl">
        <property name="redisTemplate" ref="redisTemplate" />
    </bean>
    <bean id="listener" class="redis.springredis.listern.MessageDelegateListenerImpl"/>
    <bean id="jdkSerializer" class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />
    <redis:listener-container>
        <redis:listener ref="listener" serializer="jdkSerializer" method="handleMessage" topic="java" />
    </redis:listener-container>
</beans>

1.2 消息监听接口和实现类

1.2.1监听接口

 

public interface MessageDelegateListener {

    void handleMessage(Serializable message);
}

1.2.2实现类

 

public class MessageDelegateListenerImpl implements MessageDelegateListener  {

    public void handleMessage(Serializable message) {
       if(message == null){
           System.out.println("null");
       } else if(message.getClass().isArray()){
           System.out.println(Arrays.toString((Object[])message));
       } else if(message instanceof List<?>) {
           System.out.println(message);
       } else if(message instanceof Map<? , ?>) {
            System.out.println(message);
        } else {
           System.out.println(message.toString());
       }

    }
}

1.3 测试类

 

public class Main {

    public static void main(String[] args) {
        new ClassPathXmlApplicationContext("classpath:spring.redis.xml");
        while (true) {
            try {
                System.out.println("current time: " + new Date());

                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

2.消息发布

2.1配置文件

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    <bean id="redisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
          p:hostName="localhost" p:port="6379" p:usePool="true">
    </bean>
    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"
          p:connectionFactory-ref="redisConnectionFactory"/>
    <bean id="redisDAO" class="redistest.RedisDAOImpl">
        <property name="redisTemplate" ref="redisTemplate" />
    </bean>
</beans>

2.2 消息的发布测试

2.2.1 测试接口

 

public interface RedisDAO {
    void sendMessage(String channel, Serializable message);
}

2.2.2测试接口实现类

 

@Service
public class RedisDAOImpl implements RedisDAO {

    private RedisTemplate<String, Object> redisTemplate = null;

    public RedisDAOImpl() {

    }

    public void sendMessage(String channel, Serializable message) {
        redisTemplate.convertAndSend(channel, message);
    }


    public RedisTemplate getRedisTemplate() {
        return redisTemplate;
    }

    public void setRedisTemplate(RedisTemplate redisTemplate) {
        this.redisTemplate = redisTemplate;
    }
}

2.2.3 测试发布消息程序

 

public class RedisProducer {
        @Autowired
        RedisDAO redisDAO;
        @Test
        public void testPublishMessage() throws Exception {
        String msg = "Hello, Redis!";
        redisDAO.sendMessage("java", msg); 
        Integer[] values = new Integer[]{21341,123123,12323};
        redisDAO.sendMessage("java", values); 
}

 

至此redis与spring整合的消息订阅与发布程序已经结束,后续补充理论知识。

 

 

 

Spring Boot 集成 Redis 发布订阅实现消息通信 本文介绍了如何在Spring Boot项目中集成Redis的发布订阅功能。Redis发布订阅模式通过解耦消息发送方和接收方,实现了高效的消息通信。文章详细展示了发布消息的实现(使用RedisTemplate.convertAndSend())和订阅端的配置(包括RedisMessageListenerContainer和MessageListenerAdapter)。通过实际代码示例,说明了如何配置消息监听容器、适配器以及实现消息处理器(MessageReceive类),从而完成从消息发布到接收处理的完整流 阅读详情

相关推荐

使用Spring Data Redis 发布订阅消息

在 Redis 中,发布者并没有将消息发送给特定的订阅者。是将发布的消息被划分为通道,并不知道会有哪些订阅者(如果有的话)。类似地,订阅者表示对一个或多个主题感兴趣,并且只接收感兴趣的消息,而不知道有哪些发布者(如果有的话)。发布者和订阅者的这种解耦可以实现更大的可伸缩性和更动态的网络拓扑。

m0_73311735的博客 370

SpringBoot 集成Redis PubSub发布订阅/Stream消息队列

SpringBoot 集成Redis PubSub发布订阅/Stream消息队列

qq_41902662的博客 2378

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

/** * Redis 相关的配置,包含推送,以及对象编码的定义 */ @Configuration public class RedisConfig { public @Bean RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate<Object, Object> template = new .

chijiansong的博客 219

Spring Boot 整合Redis实现消息发布与订阅

方式一:编写Redis监听类RedisMessageListener,实现Redis的监听接口MessageListener,并重写onMessage方法 方式二:编写Redis消息监听适配器类,并在RedisConfig.java中配置消息监听适配器bean

TechnicianWang的博客 3478

Spring Boot进阶(62):Redis魔法:用发布订阅功能打造高效消息队列!

如何使用Redis的发布订阅功能实现消息队列?手把手教学,还不赶紧来学!

**My Coding Family** 9806

Java实现Redis的消息订阅和发布

Java实现Redis的消息订阅和发布实例。

Spring整合Redis(八)----发布/订阅消息

Spring Data为Redis提供了专用的消息集成,在功能和命名方面与Spring Framework中的JMS集成类似。这是一个通常称为发布/订阅(简称Pub/Sub)的模式示例。RedisTemplate类用于消息生成。对于类似于Java EE的消息驱动bean风格的异步接收,Spring Data提供了一个专用的消息监听器容器,用于创建消息驱动的POJO(MDP),对于同步接收,还提供RedisConnection。

爱看技术博客 768

28377D Bootloader

架构

a6100309120的博客 6012

springboot实现redis发布/订阅

springboot实现redis发布/订阅

m0_48703915的博客 873

QuickFix Java 讲解(一)概述、下载方法,和协议内容

本系列力求手把手教你怎样利用QuickFix Java 搭建自己的 FIX 协议收法平台,以及其中的注意事项。 所有源码的地址(免费): https://github.com/zongzhec/QuickFixPractise 1. 什么是FIX,QuickFix,Quick Java? 1.1. 什么是FIX 官网以及其他翻译自官网的帖子都太官方了,这里我们设想一个情景: 你是一个交易员,现在客户打电话来让你下个单买点股票。你啪啪啪的在你的机器上熟练地输入了下单指令。系统显示:成...

4573

vLLM 多机多卡推理测试与验证(Kubernetes)vLLM 多机多卡推理 Kubernetes 验证

本文记录在两台 L20 机器,每台机器 4 块 L20 显卡(46G)的环境下,使用 vLLM 部署 Qwen2.5-32B-Instruct-GPTQ-Int4 模型并提供多节点多卡推理服务的过程。服务(Serving)模型服务是指将模型部署到生产环境中,通过 API 或其他接口提供预测服务的过程。【分布式推理与服务】(Distributed Inference and Serving)是指在多个机器或设备之间部署和管理机器学习模型,以高效地处理推理请求并满足大规模服务需求。3、启动 vLLM 服务。

流水_鱼鱼的博客 3459

java event redis_redis高级功能-超时触发事件

问题提出在和朋友讨论订单超时未支付自动关闭的实现时,考虑了一下几种方式Quartz 任务调度框架,更适合周期性的执行任务,对于订单超时未支付,只能采用5分钟一轮询数据库的形式实现Timer java原生定时工具,可少量使用,当数据量大时,性能不好控制Quartz + Timer 周期轮询(5分钟)数据库,查询出5分钟之内将要超时的订单,然后多线程创建timer完成订单的定时,这种实现方式比较复杂,...

weixin_42236014的博客 397

Bode图、ABCD矩阵与EET结合:三步搞定复杂电路传递函数分析

在模拟电路与电源控制设计中,传递函数和频率响应是衡量系统稳定性的核心指标。Bode图以直观的幅频/相频曲线揭示带宽与相位裕度,ABCD二端口矩阵可将级联网络结构化表达,而EET额外元素定理则针对寄生电容、负载效应等局部修正提供显式公式。三者互补,组合成一套从整体拓扑到局部寄生修正的完整分析方法:先用ABCD搭建主体网络,再用EET快速加入额外元件,最后用Bode图验证传递函数和稳定裕度。该方法适用于滤波器设计、电源环路补偿、运放稳定性分析等线性小信号场景,支持Python/SciPy和SPICE交叉验证,显

weixin_32496547的博客 362

spring boot + redis 实现消息的发布和订阅

1.pom.xml 的依赖。 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dep...

houxian1103的博客 382

SAP 经营范围(Operating Concern) 和业务范围 (Business Area) 在核算架构或是管理架构中的区别和联系分别是什么 请给具体的示例

摘要:SAP系统中,业务范围(Business Area)和经营范围(Operating Concern)在核算架构中具有不同功能。业务范围是FI/CO共用维度,用于跨公司码的业务线核算(如电子产品、机械设备),支持内部管理和简单对外报表。经营范围则是CO-PA专属维度,聚焦获利能力分析,可细化到产品+客户+区域组合(如分析手机在华东区域的获利情况)。两者存在层级关联:经营范围包含业务范围作为基础维度,业务范围数据会传递至经营范围进行深度分析。实际应用中需先配置业务范围,再设置经营范围并关联相关维度,共同支

金牌架构师 94

优化点列图(RMS半径)的操作数

优化点列图(RMS半径)的操作数

weixin_72050316的博客 2256

java spring redis订阅_Spring boot+redis实现消息发布与订阅的代码

一.创建spring boot项目org.springframework.bootspring-boot-starter-data-redisorg.springframework.bootspring-boot-starter-webcom.alibabafastjson1.2.41二.编辑yml配置文件server:port: 7888# 日志配置logging:config: classpa...

weixin_30830161的博客 296

EZ-INSAR工具箱(使用历史问题)

把 rasterio 升到 1.3+(或退回 py39)→features能 import → 脚本能跑 → 出图 → MATLAB 不再报错!

2301_79258000的博客 121

spring-boot集成redis实现消息发布订阅模式,以及多个订阅模式的实现

spring-boot集成redis实现消息发布订阅模式,以及多个订阅模式的实现1.需要的依赖2.配置redis以及连接池3.创建消息的发布者和消息处理者类消息发布者消息处理器POJO4.设置消息发布者、消息处理者POJO、redis消息监听容器以及redis监听器注入IOC容器5.启动项目查看控制台参照学习的博客作者和地址6.如何配置多个监听通道方式1:一个监听器订阅多个通道方式2:配置多个监听...

今晚摸鱼 8761

GStreamer中h264parse元素

h264parse是 GStreamer 中处理 H.264 视频流的关键元素,主要负责解析和准备 H.264 流以便后续处理。

深之JohnChen的专栏 1020

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Redis消息队列设计难题,如何用Spring Data Redis发布订阅完美解决?

轻松解决Redis消息队列设计难题,利用Spring Data Redis发布订阅模式实现高效异步通信。适用于订单处理、日志推送等场景,支持解耦与扩展,提升系统响应速度,值得收藏。

FastProceed的博客 691

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

揭秘Spring Data Redis发布订阅机制:如何实现毫秒级消息推送?

掌握Spring Data Redis发布订阅模式,实现毫秒级消息推送。适用于实时通知、缓存同步等场景,基于RedisMessageListenerContainer监听机制,支持高并发低延迟通信。架构解耦、性能优异,值得收藏。

QuickTrans的博客 1016

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Spring Redis - 使用Redis实现消息广播发布订阅

Spring Redis - 使用Redis实现消息广播发布订阅。

x99wang的博客 2082

spring---消息订阅发布之redis

消息的传递在分布式开发中我们常常会遇到,接下来的三篇文章分别介绍spring与redis、JMS、activeMQ的结合使用。三种方式都使用订阅发布的模式。首先我们来看一下与redis的结合使用。redis准备首先,我们先下载和安装redis,并启动redis-server。 redis下载地址tar zxvf redis-3.2.0.tar.gz cd redis-3.2.0 make cd s

丹凤朝阳 3534

Spring MVC + redis 消息的订阅发布

发布订阅(pub/sub)是一种消息通信模式,主要的目的是解耦消息发布者和消息订阅者之间的耦合,这点和设计模式中的观察者模式比较相似。pub /sub不仅仅解决发布者和订阅者直接代码级别耦合也解决两者在物理部署上的耦合。redis作为一个pub/sub server,在订阅者和发布者之间起到了消息路由的功能。订阅者可以通过subscribe和psubscribe命令向redis server订阅自己感兴趣的消息类型,redis将消息类型称为通道(channel)。当发布者通过publish命令向redis

上帝不吃素的专栏 2356

使用Spring-Redis实现消息的发布/订阅

Redis服务器可以实现简单的消息“发布/订阅”服务,下面对spring-redis实现做一个说明   spring-redis使用RedisMessageListenerContainer进行消息监听,客户程序需要自己实现MessageListener,并以指定的topic注册到RedisMessageListenerContainer, 这样,在指定的topic上如果有消息,RedisM

valenon的专栏 1万+
上一篇: Java基础知识
下一篇: 开发常用系列
shy078
博客等级 码龄13年 7粉丝 54原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值