利用 redis 实现延迟消息队列

导读:本篇文章讲解 利用 redis 实现延迟消息队列,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

有一些应用场景,比如下完订单后,20分钟没有付款,可以取消订单。这里会用到延迟消息队列。由于不想维护各种 MQ,如果你的项目里面用了 redis 的话,可以选择利用 redis 的特性来实现延迟消息队列。

设计原理:
原理实际上就是,当一条Message消息发送过来时,以String类型存储到redis数据库中。再没有消费之前,就讲key放到zset类型中排个队,称之为消息队列。然后将拍好队的消息取出来,按顺序放进List当中。之后的消费取出的消息,实际上都是从List中取出来的。图形表示如下:
利用 redis 实现延迟消息队列

项目地址: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工程:
    利用 redis 实现延迟消息队列
  • 然后启动redismq-product工程:
    利用 redis 实现延迟消息队列

  • 然后去生产一条消息,浏览器端输入http://localhost:8082/postMsg?msg=都让开,我要发消息了
    利用 redis 实现延迟消息队列
    redismq-consumer工程在延迟20s之后就会消费此消息了。
    利用 redis 实现延迟消息队列

  • 同时可以看到,生产的那条消息已经存储到redis服务中了:
    利用 redis 实现延迟消息队列

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/16048.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!