消息队列之延迟队列入门教程
一. 延迟队列的应用场景
具体应用
关于消息队列我们已经很熟悉了,我们知道在消息队列中可以实现延迟队列效果,那你知道延迟队列有哪些使用场景吗?这里我给大家总结了延迟队列的几个经典使用场景,看看你的项目中是否涉及到了。
1. 淘宝七天自动确认收货。在我们签收商品后,物流系统会在七天后延时发送一个消息给支付系统,通知支付系统将货款打给商家,这个过程持续七天,就是使用了消息中间件的延迟推送功能;
2. 订单在十分钟之内未支付则自动取消;
3. 新创建的店铺,如果在十天内都没有上传过商品,则自动发送消息提醒;
4. 用户注册成功后,如果三天内没有登陆则进行短信提醒;
5. 用户发起退款,如果三天内没有得到处理则通知相关运营人员;
6. 预定会议后,需要在预定的时间点前十分钟通知各个与会人员参加会议。
延迟队列简介
RabbitMQ 3.6.x 之前,我们一般采用死信队列+TTL过期时间来实现延迟队列,通过TTL+死信队列完成。
从RabbitMQ 3.6.x 开始,RabbitMQ 官方直接提供了延迟队列插件,可以下载放置到 RabbitMQ 根目录下的 plugins 下,这样就可以很轻松的实现延迟队列效果了。
那么延迟队列到底该怎么使用呢?今天我就通过一个小案例来带大家实现一下。
二. 本次需求
以下是我们今天要实现的基本需求。
用户注册成功后,如果三天内没有登陆则进行短信提醒。
你现在有没有什么实现思路呢?别急,请跟着我一点点往下看吧。
三. 安装配置RabbitMQ
我们采用Docker来安装配置RabbitMQ及其插件,如果你对Docker还不了解,可以参考如下视频教程:
Docker快速入门教程
Docker 安装 RabbitMQ
1.1 查找RabbitMQ镜像
docker search rabbitmq
1.2 拉取RabbitMQ镜像
docker pull rabbitmq (镜像未配有控制台)
docker pull rabbitmq:management (镜像配有控制台)
注意:
rabbitmq是官方镜像,该镜像不带控制台。如果要安装带控制台的镜像,需要在拉取镜像时附带
tag标签,例如:management。
tag标签可以通过https://hub.docker.com//rabbitmq?tab=tags来查询。
1.3 启动RabbitMQ
docker run -d --name rabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 rabbitmq:management
创建容器并运行(15672是管理界面的端口,5672是服务的端口。
这里顺便将管理系统的用户名和密码设置为admin admin
-e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin
1.4 停止RabbitMQ
docker stop rabbitmq
1.5 重启 RabbitMQ 容器
docker restart rabbitmq
1.6 查看 RabbitMQ 容器进程信息
docker top rabbitmq
安装延迟队列插件
2.1 下载与RabbitMQ相匹配的插件版本
https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/
https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases/tag/v3.8.0
2.2 上传插件到服务器的/root文件夹下,然后进行如下操作
四. 实现延迟消息
基本需求
用户注册成功后,如果三天内没有登陆则进行短信提醒。本需求基本架构如下图所示:
生产者Provider
Provider部分代码如下所示:
交换机配置
交换机代码如下所示:
消费者Consumer
消费者部分的代码如下所示:
这样我们通过以上配置和代码,就可以实现这个基本需求了。
相关推荐HOT
更多>>如何添加Java环境变量?
要添加Java环境变量,可以按照以下步骤:并安装Java开发工具包(JDK)、找到Java安装路径、设置JAVA_HOME环境变量、添加Java可执行文件路径到PATH...详情>>
2023-05-04 11:00:56从零开始学Java之String字符串的编码
对很多小白来说,可能不明白什么是字符编码,也不知道为什么要有字符编码,所以先来给大家简要地介绍一下字符编码。详情>>
2023-05-04 10:21:02新手速来!几步带你掌握MyBatis Plus
Mybatis-Plus(简称MP)是一款Mybatis的增强工具,它是在Mybatis的基础上实现的简化开发工具。Mybatis-Plus给我们提供了开箱即用的CRUD操作、自动...详情>>
2023-04-28 10:57:09学习java需要什么基础?基础知识有哪些?
网络编程:了解基本的网络编程概念和协议,熟悉 Java 网络编程 API。建议在学习 Java 之前,先学习一些基础的编程语言,如 C 或 Python 等,这...详情>>
2023-04-28 10:41:14