利用 redis 实现延迟消息队列
有一些应用场景,比如下完订单后,20分钟没有付款,可以取消订单。这里会用到延迟消息队列。由于不想维护各种
MQ
,如果你的项目里面用了redis
的话,可以选择利用redis
的特性来实现延迟消息队列。
设计原理:
原理实际上就是,当一条Message消息发送过来时,以String类型存储到redis数据库中。再没有消费之前,就讲key放到zset类型中排个队,称之为消息队列。然后将拍好队的消息取出来,按顺序放进List当中。之后的消费取出的消息,实际上都是从List中取出来的。图形表示如下:
项目地址:https://gitee.com/olysa/redismq
项目结构:
├─redismq-common //生产者和消费者公用代码,比如队列信息和redis配置信息
│ ├─src
│ │ ├─main
│ │ │ ├─java
│ │ │ │ └─com
│ │ │ │ └─sqlb
│ │ │ │ └─redismq
│ │ │ │ └─common
│ │ │ │ ├─config //存放mq的消费队列胚子信息
│ │ │ │ ├─msmq //核心mq代码
│ │ │ │ └─utils //操作redis的工具类
│ │ │ └─resources
│ │ │ └─configure
├─redismq-consumer //消费者
│ ├─src
│ │ ├─main
│ │ │ ├─java
│ │ │ │ └─com
│ │ │ │ └─sqlb
│ │ │ │ └─redismq
│ │ │ │ └─consumer
│ │ │ │ └─task //包含定时任务,用来消费队列消息
│ │ │ └─resources
└─redismq-product //生产者├─src│ ├─main│ │ ├─java│ │ │ └─com│ │ │ └─sqlb│ │ │ └─redismq│ │ │ └─product│ │ │ └─controller //产生消息的生产者│ │ └─resources
redis
安装: 本人是基于centos7
安装的。可以参考 Redis安装和常见问题解决 。
使用说明:
- 先启动
redismq-consumer
工程:
然后启动
redismq-product
工程:
然后去生产一条消息,浏览器端输入
http://localhost:8082/postMsg?msg=都让开,我要发消息了
:
redismq-consumer
工程在延迟20s
之后就会消费此消息了。
同时可以看到,生产的那条消息已经存储到
redis
服务中了:
利用 redis 实现延迟消息队列相关推荐
- redis延迟消息队列不准时php,Redis实现延迟消息队列
消息队列是应用中常用的一个技术点,通常我们可以借助消息队列中间件来实现,但是并不是所有的情况下,都需要使用到MQ. 如果只需要实现简单的消息队列,那么借助Redis即可. 如果对消息有着严格的可靠性等 ...
- java redis延迟队列_基于redis实现的延迟消息队列
delay-queue redis实现延迟消息队列 需求背景 最近在做一个排队取号的系统 在用户预约时间到达前XX分钟发短信通知 在用户预约时间结束时要判断用户是否去取号了,不然就记录为爽约 在用户取 ...
- Redis如何实现消息队列
消息队列的实现方式有很多种,比如有专业的rabbitmq,rocketmq,kafka等,这些mq提供了非常专业的功能实现异步发送,而且这些接入又比较复杂. Redis 利用 其 专有的数据结构lis ...
- 使用 Redis Stream 实现消息队列
使用 Redis Stream 实现消息队列 Intro Redis 5.0 中增加了 Stream 的支持,利用 Stream 我们可以实现可靠的消息队列,并且支持一个消息被多个消费者所消费,可以很 ...
- redis 消息队列 过段时间不能下发_以Redis来谈消息队列
首先 我先引入一个大家熟知的观点:Reids可以作为消息队列来使用 redis提供了两种方式来做消息队列,一种是生产者消费者模式,一种是发布订阅模式. 本篇文章将从 异步,解耦,分布式,可靠四部分来探 ...
- redis stream 实现消息队列
redis stream 实现消息队列 Redis5.0带来了Stream类型.从字面上看是流类型,但其实从功能上看,应该是Redis对消息队列(MQ,Message Queue)的完善实现. 基于r ...
- redis list 实现消息队列 多线程消费
redis list 实现消息队列 多线程消费 redis list 实现消息队列 多线程消费 redis list 实现消息队列 多线程消费 利用redis list 命令: Redis Brpop ...
- 消息队列和延迟消息队列
应用场景 1.商品秒杀 短时间内出现爆发式的用户请求,如果不采取相关的措施,会导致服务器忙不过来,响应超时的问题,轻则会导致服务假死,重则会让服务器直接宕机. 这个时候加上了消息队列,服务器接收到用户 ...
- redis简单队列java_使用Redis的简单消息队列
redis简单队列java 在本文中,我们将使用列表命令将Redis用作简单的消息队列. 假设我们有一个允许用户上传照片的应用程序. 然后在应用程序中,我们以不同大小显示照片,例如Thumb,Medi ...
最新文章
- u盘安装linux启动报错,U盘安装centos7,启动报错
- jQuery easyUI--下拉菜单的制作
- 职业生涯发展技巧20则
- windows系统中创建线程常用哪几个函数,有什么区别?
- C语言课后习题(17)
- hdu1114完全背包
- PLSQL 的简单命令之三
- 朗文当代高级英语辞典android,朗文当代高级英语辞典
- 【大数据】分布式机器学习平台
- 解决appium中Error: The port #8100 is occupied by an other process的问题
- 教你如何在word中像LaTex那样打公式
- 李小璐JAVA,李小璐和马蓉为什么都会婚内出轨?
- nodejs生成二维码
- 云里黑白第一回——华硕mbr机械硬盘迁移到m.2固态,3秒开机
- 艾森豪威尔时间管理法则
- 逆水寒服务器维护,逆水寒11月29日更新到几点进游戏 逆水寒更新维护公告
- 同步任务和异步任务执行过程
- idea中的CTRL+alt+L快捷键不能用
- MySQL数据库快速入门
- MySql 查询有课的学生的学号,姓名和所学的课号及成绩
热门文章
- [Python从零到壹] 二.语法基础之条件语句、循环语句和函数
- weui的uploader使用
- project euler 19: Counting Sundays
- 遗传算法是一种进化算法_我是如何设计一种算法的,该算法混合了到您镇上的乐队的播放列表...
- 时间管理的高级技巧培训
- photoshop CS6关于字体显示小的问题
- java jdk 7u79 64位_jdk-7u79-windows-x64.exe下载
- Deepin Linux v20+ 安装Docker最新版的方法
- 关于《香港制造》的零碎记忆
- 大额现金方式出借款项不宜不经审查直接以民事调解书