有一些应用场景,比如下完订单后,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安装和常见问题解决 。
使用说明:
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/16048.html