有一些应用场景,比如下完订单后,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 实现延迟消息队列相关推荐

  1. redis延迟消息队列不准时php,Redis实现延迟消息队列

    消息队列是应用中常用的一个技术点,通常我们可以借助消息队列中间件来实现,但是并不是所有的情况下,都需要使用到MQ. 如果只需要实现简单的消息队列,那么借助Redis即可. 如果对消息有着严格的可靠性等 ...

  2. java redis延迟队列_基于redis实现的延迟消息队列

    delay-queue redis实现延迟消息队列 需求背景 最近在做一个排队取号的系统 在用户预约时间到达前XX分钟发短信通知 在用户预约时间结束时要判断用户是否去取号了,不然就记录为爽约 在用户取 ...

  3. Redis如何实现消息队列

    消息队列的实现方式有很多种,比如有专业的rabbitmq,rocketmq,kafka等,这些mq提供了非常专业的功能实现异步发送,而且这些接入又比较复杂. Redis 利用 其 专有的数据结构lis ...

  4. 使用 Redis Stream 实现消息队列

    使用 Redis Stream 实现消息队列 Intro Redis 5.0 中增加了 Stream 的支持,利用 Stream 我们可以实现可靠的消息队列,并且支持一个消息被多个消费者所消费,可以很 ...

  5. redis 消息队列 过段时间不能下发_以Redis来谈消息队列

    首先 我先引入一个大家熟知的观点:Reids可以作为消息队列来使用 redis提供了两种方式来做消息队列,一种是生产者消费者模式,一种是发布订阅模式. 本篇文章将从 异步,解耦,分布式,可靠四部分来探 ...

  6. redis stream 实现消息队列

    redis stream 实现消息队列 Redis5.0带来了Stream类型.从字面上看是流类型,但其实从功能上看,应该是Redis对消息队列(MQ,Message Queue)的完善实现. 基于r ...

  7. redis list 实现消息队列 多线程消费

    redis list 实现消息队列 多线程消费 redis list 实现消息队列 多线程消费 redis list 实现消息队列 多线程消费 利用redis list 命令: Redis Brpop ...

  8. 消息队列和延迟消息队列

    应用场景 1.商品秒杀 短时间内出现爆发式的用户请求,如果不采取相关的措施,会导致服务器忙不过来,响应超时的问题,轻则会导致服务假死,重则会让服务器直接宕机. 这个时候加上了消息队列,服务器接收到用户 ...

  9. redis简单队列java_使用Redis的简单消息队列

    redis简单队列java 在本文中,我们将使用列表命令将Redis用作简单的消息队列. 假设我们有一个允许用户上传照片的应用程序. 然后在应用程序中,我们以不同大小显示照片,例如Thumb,Medi ...

最新文章

  1. u盘安装linux启动报错,U盘安装centos7,启动报错
  2. jQuery easyUI--下拉菜单的制作
  3. 职业生涯发展技巧20则
  4. windows系统中创建线程常用哪几个函数,有什么区别?
  5. C语言课后习题(17)
  6. hdu1114完全背包
  7. PLSQL 的简单命令之三
  8. 朗文当代高级英语辞典android,朗文当代高级英语辞典
  9. 【大数据】分布式机器学习平台
  10. 解决appium中Error: The port #8100 is occupied by an other process的问题
  11. 教你如何在word中像LaTex那样打公式
  12. 李小璐JAVA,李小璐和马蓉为什么都会婚内出轨?
  13. nodejs生成二维码
  14. 云里黑白第一回——华硕mbr机械硬盘迁移到m.2固态,3秒开机
  15. 艾森豪威尔时间管理法则
  16. 逆水寒服务器维护,逆水寒11月29日更新到几点进游戏 逆水寒更新维护公告
  17. 同步任务和异步任务执行过程
  18. idea中的CTRL+alt+L快捷键不能用
  19. MySQL数据库快速入门
  20. MySql 查询有课的学生的学号,姓名和所学的课号及成绩

热门文章

  1. [Python从零到壹] 二.语法基础之条件语句、循环语句和函数
  2. weui的uploader使用
  3. project euler 19: Counting Sundays
  4. 遗传算法是一种进化算法_我是如何设计一种算法的,该算法混合了到您镇上的乐队的播放列表...
  5. 时间管理的高级技巧培训
  6. photoshop CS6关于字体显示小的问题
  7. java jdk 7u79 64位_jdk-7u79-windows-x64.exe下载
  8. Deepin Linux v20+ 安装Docker最新版的方法
  9. 关于《香港制造》的零碎记忆
  10. 大额现金方式出借款项不宜不经审查直接以民事调解书