SpringBoot中利用redis实现消息队列

SpringBoot 集成 Redis 实现消息队列 list 原理说明 Redis 的 list 是按照插入顺序排序的字符串链表。 如图所示,可以通过 lpush和 rpop 或者 rpush 和 lpop 实现消息队列。 1 lpush 和 rpop 2 rpush 和 lpop 消息队列实现 引入 Redis 依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>sprin. 阅读详情

最近在工作中遇到了需要消息队列功能,听说redis可以实现此功能,特意总结一下。

1.首先将redis配置好和引入maven jar包

  #redis 配置
  redis:
    #Redis数据库索引(默认为0)
    database: 0
    host: 10.168.2.160
    port: 6379
    lettuce:
      pool:
        max-active: 8   #最大连接数据库连接数,设 0 为没有限制
        max-idle: 8     #最大等待连接中的数量,设 0 为没有限制
        max-wait: -1ms  #最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
        min-idle: 0     #最小等待连接中的数量,设 0 为没有限制
      shutdown-timeout: 100ms
      #password: auMartadmin@@  密码待定
		<!-- Redis -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-redis</artifactId>
		</dependency>

2.开始书写代码  消息的接收者

package com.pinemousecloudsevice.messagequeue;

import com.pinemousecloudsevice.common.constant.CommonConstant;
import com.pinemousecloudsevice.messagequeue.message.OrderInvoiceMessage;
import com.pinemousecloudsevice.task.service.AutoInvoiceStatusQueryService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.connection.MessageListener;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;



/**
 * 消息接收者实体类
 * @author 
 * @date 2021-03-18
 */
@Slf4j
@Component
public class RedisMessage implements MessageListener {
    @Resource
    private RedisTemplate<String, Object> redisTemplate;

    @Resource
    private AutoInvoiceStatusQueryService autoInvoiceStatusQueryService;

    /**
     *实际业务代码 消息体为对象实体
     */
//    @Override
//    public void onMessage(Message message, byte[] pattern) {
//        RedisSerializer<?> serializer = redisTemplate.getValueSerializer();
//        OrderInvoiceMessage orderInvoiceMessage = (OrderInvoiceMessage) serializer.deserialize(message.getBody());
//        //发票订单查询处理
//        Boolean isStop = autoInvoiceStatusQueryService.invoiceOrderQueryHandle(orderInvoiceMessage);
//        //不停止订单查询 加入redis list集合中
//        if(!isStop){
//            redisTemplate.opsForList().rightPush(CommonConstant.INVOICE_QUERY_STATUS_LIST, orderInvoiceMessage);
//        }
//    }

    /**
     * 测试代码
     */
    @Override
    public void onMessage(Message message, byte[] pattern) {
        RedisSerializer<String> serializer = redisTemplate.getStringSerializer();
        String msg = serializer.deserialize(message.getBody());
        System.out.println("接收到的消息是:" + msg);
    }

}

3.配置消息订阅者

import com.pinemousecloudsevice.messagequeue.RedisMessage;
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;




/**
 * 消息队列  订阅者  redis配置
 * @author 
 * @date 2021-03-18
 */
@Configuration
public class RedisSubConfig {

    /**
     * 创建连接工厂
     *
     * @param connectionFactory
     * @param adapter
     * @return
     */
    @Bean
    public RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
                                                   MessageListenerAdapter adapter) {
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        container.addMessageListener(adapter, new PatternTopic("topic"));
        return container;
    }

    /**
     * @param message
     * @return
     */
    @Bean
    public MessageListenerAdapter adapter(RedisMessage message){
        // onMessage 如果RedisMessage 中 没有实现接口,这个参数必须跟RedisMessage中的读取信息的方法名称一样
        return new MessageListenerAdapter(message, "onMessage");
    }
}

4.测试代码

@RestController
public class MsgController {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @GetMapping("/sendMsg")
    public String sendMsg(){
        stringRedisTemplate.convertAndSend("topic", "Hello world!");
        return "ok";
    }
}

其中 stringRedisTemplate也可替换为

@Resource
private RedisTemplate<String, Object> redisTemplate;
利用Springboot+Redis实现消息队列(发布与订阅) 阅读详情

相关推荐

SpringBoot利用redis集成消息队列的方法

主要介绍了SpringBoot利用redis集成消息队列的方法,需要的朋友可以参考下

基于Springboot+Redis的消息队列在高负载场景下的优化实践

基于Springboot+Redis的消息队列

豆豆娃的博客 370

华为防火墙双ISP出口实战:如何用策略路由实现电信联通流量自动切换(附配置截图)

本文详细解析了华为防火墙在双ISP环境下的智能选路技术,通过策略路由与健康检测的深度应用,实现电信联通流量的自动切换。文章包含实战配置截图,帮助企业解决切换延迟、路径劣化等核心挑战,提升业务连续性。

backprop5master的博客 643

Spring Boot 整合Redis实现消息队列

Spring Boot 整合Redis实现消息队列,RedisMessageListenerContainer的使用,Pub/Sub模式的优缺点

嘉禾嘉宁papa 1万+

高通Camera AWB跳变问题实战:从夕阳场景到参数调优的完整避坑指南

本文深入解析高通Camera AWB跳变问题,特别是在夕阳场景下的色温突变现象。通过分析灰区统计失效、光源混合干扰等成因,提供从参数调优到诊断工具链的完整解决方案,包括动态灰区扩展算法、色温平滑过渡方案及高通平台特定优化技巧,帮助工程师有效解决AWB跳变问题。

sre5engineer的博客 858

Palantir解密:“本体”的建模逻辑及其扩展方向

上一篇重点从对现实世界建模的角度探讨了“本体”在数字化架构中的核心意义。这里借Palantir的“本体”概念、解析Palantir只是起点,目标旨在以他山之石攻玉——探索数字世界的底层架构逻辑,最终为构建自主体系提供思考。Palantir以“本体论”为核心的建模方案是否代表终极答案,不宜过早下结论,但其思路值得深入剖析。

SZSDQJC的博客 2635

springboot:整合redis之消息队列

springboot:整合redis之消息队列

拒绝熬夜啊的博客 5134

第1集:认识 Claude Code —— AI 编程新纪元

1. 定义 Claude Code:终端中的 AI 编程代理Claude Code 是 Anthropic 公司于 2025 年 5 月正式推出的命令行 AI 编程工具,它不只是一个代码补全工具,而是一个能够理解项目、自主执行任务的**终端 AI 代理(Agent)。它的核心理念是 **"生于终端,活于终端"** (lives in your terminal)。与深度嵌入图形界面(GUI)的工具不同,Claude Code 选择直接融入开发者最原始、最核心的工作环境——命令行。

dianziyao_的博客 865

SpringBoot 整合 Redis 实现消息队列

Redis 消息队列分为两种:生产者消费者模式及发布订阅模式 生产者消费者模式:生产者将消息发送至消息信道,所有消费者共享该消息信道,从中取出全部消息之后进行筛选处理 发布订阅模式:消费者提前选定自己需要的消息类型,只接收自己需要的消息 在 pom.xml 中加入依赖 <dependency> <groupId>org...

词庸 6236

【踩坑记录】colmap中的相机位姿的坐标系定义及其可视化结果的隐含转换

1 坐标系定义及转换   首先介绍一下世界坐标系和相机坐标系之间的转换,它们之间是存在一个转换关系的。现假设空间中一点X,它在相机坐标系下的坐标是Xcamera,在世界坐标系下的坐标是Xworld。假设它通过R和t实现从相机坐标系到世界坐标系之间的转换: Xworld = RXcamera + t   那么,由上式,我们可以推得从世界坐标系向相机坐标系的转换关系(RT=R-1,所以通常直接使用RT即可): Xcamera = RTXworld - RTt   所以,两个坐标系之间的转换,需要看其具体

zeeq的博客 2万+

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的零售柜商品检测软件(Python+PySide6界面+训练代码)

随着新零售概念的兴起,无人零售柜、智能零售店等新型零售模式快速发展。传统零售柜依赖于人工盘点和补货,效率低下且成本高昂。本文提出了一种基于YOLO系列目标检测算法的零售柜商品检测系统,实现了对零售柜内商品的自动识别、计数和库存管理。系统采用PySide6开发用户界面,集成了YOLOv5、YOLOv6、YOLOv7和YOLOv8等多种先进的深度学习模型,提供了完整的训练和推理流程。本文将详细介绍系统设计、算法实现、数据集构建和实际应用效果,并提供完整的代码实现。

YOLO 333

使用SpringBoot利用Redis实现消息队列

随着互联网的发展,消息队列的应用越来越广泛。消息队列可以解决系统之间的异步通信问题,提高系统的可靠性和可扩展性。在Java开发中,Redis作为一种高性能的缓存和消息队列系统,被广泛应用。本文将介绍如何使用SpringBoot中利用Redis实现消息队列。

果酱 の 博客 4694

汽车零部件产线实战:C#上位机+YOLO实现螺栓装配到位视觉检测

本项目基于C#上位机+YOLOv8实现汽车零部件产线螺栓装配到位视觉检测,全程贴合产线实际场景,从硬件选型、安装调试,到模型训练、上位机开发,再到项目联调、优化扩展,均提供手把手实操指导,代码可直接复制使用,规避了工业视觉产线检测的高频踩坑点。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1330

利用 Spring Boot 和 Redis 实现消息队列的实践示例

定义消息模型,包括消息的内容、发送者、接收者等信息。注:麻烦大家关注我的公众号,会每日更新,面试题笔试题都会更新,麻烦大家多多关注。

新生代码农的博客 1003

YOLOv8进阶实战:融合SAHI超推理算法,在无人机应用中精准捕捉视频与图片中的微小目标

YOLOv8改进是一种先进的目标检测算法,通过引入辅助超推理算法SAHI推理,使得小目标无法逃避检测。SAHI推理算法结合视频和图片的特点,利用先进的超推理技术,提高了目标检测的准确性和鲁棒性。不仅如此,YOLOv8改进还支持对视频和图片进行实时的目标检测,将检测结果直观地呈现给用户。这一技术的应用范围广泛,可以用于安防领域,提升监控设备的性能和效率;也可以用于无人驾驶领域,实现精准的目标识别和跟踪。总之,YOLOv8改进是一项具有突破性的技术,为目标检测领域带来了重大的进展。

weixin_51988935的博客 807

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Springboot21 整合redis、利用redis实现消息队列

1 前提准备   1.1 创建一个springboot项目     技巧01:本博文基于springboot2.0创建   1.2 安装redis     1.2.1 linux版本       参考博文     1.2.2 windows版本       到redis官网下载windows版本的压缩包后,解压即可   1.3 redis使用     本博文以window版...

weixin_30732487的博客 285

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

SpringBoot 使用 redis实现 生产者/消费者模式 消息队列

概述 今天主要是来说一下如何在Springboot中使用redis实现一个 生产者/消费者模式的队列, 首先解释下几个问题。 1、什么是生产者/消费者模式? 消息队列一般是有两种场景 1、种是发布者订阅者模式 2、种是生产者消费者模式 生产者消费者模式 :生产者生产消息放到队列里,多个消费者同时监听队列,谁先抢到消息谁就会从队列中取走消息;即对于每个消息只能被最多一个消费者拥有。 通俗一点说就是比...

m0_37859502的博客 7009

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Redis系列---【如何使用redis实现消息队列?】

特性Redis List (方案一)Redis Streams (方案二)易用性非常简单,符合直觉中等,概念稍多可靠性良好。消息在Redis中,只要Redis不丢数据就不会丢。但如果消费者取出消息后崩溃,消息会丢失。非常高。支持消费组和ACK,消费者崩溃未ACK的消息可以被重新投递。功能基本队列功能消费组、消息持久化、ACK机制、失败重投适用场景简单的异步任务、日志收集、延迟处理等需要高可靠性的订单处理、事件溯源等复杂场景对于您“实现异步消息写入队列”的初始需求,

-少年-的博客 1010

springboot使用redis实现消息队列

一、概念消息队列分为两种模式,一种是发布订阅模式,一种是生产者消费者模式。生产者消费者模式:生产者生产消息放到队列里,多个消费者同时监听队列,谁先抢到消息谁就会从队列中取走消息;即对于每个消息只能被最多一个消费者拥有。发布者订阅者模式:发布者生产消息放到队列里,多个监听队列的消费者都会收到同一份消息;即正常情况下每个消费者收到的消息应该都是一样的。二、生产者消费者实现1.springboot添加依...

hzs33的博客 2677

Spring Boot 使用 Redis 实现消息队列

本文介绍了Spring Boot使用Redis实现消息队列的完整方案。首先通过咖啡厅留言板的比喻解释了Redis消息队列的基本概念,对比了Redis与专业消息中间件的特性差异。其次详细讲解了Redis实现消息队列的三种方式:基于List的简单队列、Pub/Sub发布订阅模式和Stream高级队列,并分析了各自适用场景。文章还提供了Spring Boot整合Redis消息队列的代码实现示例,包括生产者发送普通/延迟消息和消费者定时消费消息的功能实现。这种轻量级方案适合异步任务处理、流量削峰和系统解耦等常见业务

奔跑的坏蜗牛 1636

基于redis stream + spring boot的消息队列机制简单实现

基于redis stream + spring boot的消息队列机制简单实现 1.通知结构整体设计 2.流程解析 在各个不同的功能点都可能触发消息通知,借助LxNoticeStreamUtil#addNoticeMessage(Integer noticeAction,String actionParam)方法将消息推送到指定队列 在程序启动时就会由StreamConsumerRunner启动MQ的监听器StreamMessageListener,一旦有消息产生,监听者自动接收消息,并解析执行

wangzibai的博客 1801

springboot+redis实现消息队列

涉及spring和springboot使用的部分 RedisTemplate序列化的配置,以及api相关的应用 fastjson的JSONObject等相关使用 InitializingBean,ApplicationContextAware是使用,以及其实现接口的作用 线程池相关的问题学习 模板模式的抽象能力 代码 pom.xml文件 <modelVersion>4.0.0</modelVersion> <parent> .

Meiko记录 1091

Springboot Redis消息队列

Redis list Redis 的 list(列表) 数据结构常用来作为异步消息队列使用,使用rpush/lpush操作入队列, 使用 lpop和 rpop来出队列。 rpush RPUSH key value [value …] 将一个或多个值 value 插入到列表 key 的表尾(最右边)。 如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表尾:比如对一个空列表 mylist 执行 RPUSH mylist a b c ,得出的结果列表为 a b c ,等同于执行命令

今天星期六 998

Spring Boot使用Redis实现消息队列

摘要:本文介绍了使用Redis在Spring Boot中实现消息队列的两种方式:Pub/Sub模式和Stream模式。Pub/Sub适用于实时通知等场景,但不支持消息持久化;Stream模式则支持消息持久化、消费者组等特性,适合订单处理等关键业务场景。文章详细对比了两种方式的特性差异,并提供了Pub/Sub模式的完整代码实现,包括生产者、消费者和配置类,帮助开发者在现有Redis环境快速搭建消息队列系统。

奔跑的坏蜗牛 491
上一篇: MyBatis @Insert 注解方式批量插入操作
下一篇: 基于自动化工具autox.js的抢票(猫眼)
Java_wucao
博客等级 码龄11年 272粉丝 42原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java_wucao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值