Springboot 使用 RabbitMq 延迟插件 实现订单到期未支付取消订单、设置提醒消息

示例业务场景:
场景1:客户下单后,15分钟内未支付取消订单!
场景2:客户下单支付成功后,5分钟内商家未处理订单,需要推送一条消息提醒商家。如依旧未处理,则需要每隔2分钟消息提醒一下商家!
这两种场景都是可以使用延迟消息来实现,rabbitMq 提供了2种实现延迟消息的方式,死信队列延迟插件

使用docker 安装部署 rabbitMq
1,下载rabbitMq镜像;

docker pull rabbitmq

2,启动rabbitMq 容器;

docker run -d --name rabbit001 -p 15672:15672 -p 5672:5672 rabbitmq -v rabbitMq:/etc/rabbitmq rabbitmq

3,运行完成后,rabbitMq 服务通过ip+15762 访问后管平台;
如果访问不了,则需要在容器内安装可视化插件;(在容器内的/plugins 目录内执行)

rabbitmq-plugins enable rabbitmq_management

4,安装延迟插件;
1,在官网内下载对应版本的延迟插件上传到服务器内;(例如在官网下载的延迟插件放在了/home/rabbitmq目录内)

docker cp /home/rabbitmq/rabbitmq_delayed_message_exchange-3.12.0.ez 4296be33b41e:plugins/

2,然后再进入容器内安装延迟插件;

rabbitmq-plugins enable rabbitmq_delayed_message_exchange

5,重启rabbitMq容器再通过ip+15672 访问即可!初始登录账户密码:guest/guest

6,修改默认密码;

1,进入容器内;
2,查看用户列表:rabbitmqctl  list_users
3,修改guest密码(尽量设置复杂点):rabbitmqctl  change_password  guest  '@#20231126%&*'

7,通过死信队列实现延迟消息配置;

1,建立交换机:order-reserve-echage
2,建立队列 dead-queues,参数如下设置x-dead-letter-exchange:	order-reserve-echagex-dead-letter-routing-key:	key2x-message-ttl:	900000durable:	true
3,建立队列 receivedq,无其他参数;
4,再进到刚刚建立的交换机 order-reserve-echage 内去绑定路由键;dead-queues     key1	receivedq       key2

8,使用延时插件创建延迟队列;

1,建立延迟交换机:delayed-exchange注意:Type 是 x-delayed-messages 类型;添加一个参数:x-delayed-type    direct2,然后建立一个队列: delayed-queue ,无其他参数;3,然后再进到交换机 delayed-exchange 内去绑定路由键;delayed-queue   delayed-routing-key

以上 rabbitMq 安装配置好之后做以下介绍:
问:什么是死信队列?

就是一个普通的队列,只不过我们自行做两点约束:
1,设置了队列、或发往队列内的消息要有过期时间;
2,要确保没有消费者主动订阅消费该队列内的消息;

问:死信队列如何实现延迟消息的?

需要创建2个队列,一个死信队列,一个普通的队列。且需要创建一个交换机去绑定这两个队列。在创建死信队列时,需要指定一个 x-dead-letter-routing-key (也就是消息过期后需要重新发往的队列)。
我们发送消息到死信队列内,消息过期后会由交换机转发到 死信队列绑定的 x-dead-letter-routing-key 上。这个时候我们只需要监听普通队列即可。
例如:我们想要发一条消息 15 分钟后收到这条消息。那么我们就可以发送一条过期时间为15分钟的消息到 死信队列,在没有任何消费者消费的情况下,15分钟后这条消息会过期,过期后会由交换机转发给绑定的普通队列内,这时我们在 普通队列接受到的消息就是15分钟前发送的消息!

问:死信队列 和 延迟插件 实现的延迟消息有什么不同?

死信队列:先发的消息会先收到,后发的消息会后收到,不会受设置的消息过期时间控制;
例如:我先往死信队列内发一条15分钟后后期的消息,再发一条 3分钟后过期的消息。我们肯定是想先收到3分钟过期的消息,但是受队列特性的影响(先入先出),
我们只有在消费了先发的15分钟过期的消息后才能收到那条3分钟的消息!!!延迟插件:不会出现以上情况,以设置的过期时间先后顺序接收到消息!先发了 一条 15分钟延迟消息,再发一条 3分钟过期消息,会先收到 3分钟过期的消息

以上两种业务场景实现思路:
场景1:客户下单后,15分钟内未支付取消订单!

1,客户下单后发送一条15分钟的延迟消息,消息内带有 订单的id;
2,监听到延时消息后,拿到消息id去查询一下订单信息,如还未支付则取消订单。

场景2:客户下单支付成功后,5分钟内商家未处理订单,需要推送一条消息提醒商家。如依旧未处理,则需要每隔2分钟消息提醒一下商家!

1,客户下单支付成功后发送一条5分钟的延时消息,消息内带有订单id;
2,5分钟后监听到消息,则去判断下当前订单是否有没有被处理,如果还没被处理则提醒商家。并且再发一条2分钟的延时消息!
3,2分钟后再次监听到该消息后重复此步骤,如果商家未处理则提醒,并且再发延迟消息!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/173584.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STL常用算法-C++

概述&#xff1a; 算法主要是由头文件 <algorithm> <functional> <numeric> 组成。<algorithm> 是所有 STL 头文件中最大的一个&#xff0c;范围涉及是比较、交换、查找、遍历操作、复制、修改等等。<functional> 定义了一些模板类&#xff0c;…

机器人制作开源方案 | 网球自动拾取机

作者&#xff1a;柳文浩、李浩杰、苏伟男、贾思萌、张天芸 单位&#xff1a;西安外事学院 指导老师&#xff1a;胡宝权、陈小虎 1. 产品说明 1.1 设计目的 近年来&#xff0c;网球运动越来越受到老百姓的欢迎&#xff0c;各种规模的比赛层出不穷。然而由于网球运动极为激烈…

中国改性聚丙烯产业调研与投资战略报告(2023版)

内容介绍&#xff1a; 改性聚丙烯就是基于聚丙烯原料对其性能和其他方面的一些改进&#xff0c;如增强聚丙烯材料的冲击、拉伸强度、弹性等。聚丙烯改性主要通过化学改性和物理改性进行调整&#xff0c;使其在拥有本身优异性能的同时可以兼顾其他有利于生产和使用的性能。改性…

Python3基础

导包 在 python 用 import 或者 from...import 来导入相应的模块。 将整个模块(somemodule)导入&#xff0c;格式为&#xff1a; import somemodule 从某个模块中导入某个函数,格式为&#xff1a; from somemodule import somefunction 从某个模块中导入多个函数,格式为&#…

C++基础 -4- C/C++混合编程

引用格式(图片代码段呈现) extern "C" {#include "string.h" }代码验证 &#xff08;分别使用了C/C 的标准输出&#xff09; #include "iostream"using namespace std;extern "C" { #include "stdio.h" #include "…

Win11修改用户名(超详细图文)

新买的电脑一般预装Windows11系统&#xff08;家庭与学生版&#xff09;&#xff0c;新电脑初次开机使用微软邮箱账号登录&#xff0c;则系统将用户名自动设置成邮箱前5位字符。我的用户名便是一串数字【231xx】&#xff08;qq邮箱前5位&#xff09;&#xff0c;看着很不舒服&a…

快速掌握Pyqt5的10种容器(Containers)

快速掌握Pyqt5的三种主窗口 快速掌握Pyqt5的2种弹簧 快速掌握Pyqt5的5种布局 快速弄懂Pyqt5的5种项目视图&#xff08;Item View&#xff09; 快速弄懂Pyqt5的4种项目部件&#xff08;Item Widget&#xff09; 快速掌握Pyqt5的6种按钮 快速掌握Pyqt5的20种输入控件&#xff08;…

属性级情感分析

笔记为自我总结整理的学习笔记&#xff0c;若有错误欢迎指出哟~ 属性级情感分析 简介数据集介绍数据加载和预处理&#xff08;data_utils.py&#xff09;预训练模型&#xff08;skep&#xff09;模型定义模块&#xff08;model.py&#xff09;训练配置&#xff08;config.py&am…

element 的 Notification 通知,自定义内容

通知事件&#xff1a; // 商户后台通知 MerchantBackgroundNotice() {// 禁止消息通知弹出多条if(this.notifyInstance) {this.notifyInstance.close();}const h this.$createElement; // 创建文本节点this.notifyInstance this.$notify({showClose: false, // 禁止关闭按钮…

Powerbuilder中利用API实现动画特效

Powerbuilder中利用API实现动画特效 摘要:本文通过在Powerbuilder中调用Windows API函数,实现任意图片的放大及任意图片从正面逐渐翻转到背面的功能 关键词:内存设备描述表 显示器设备描述表 API 一、问题的提出 Powerbuilder是一个面向对象的开发大型数据库的图形化的前端开…

vue随意置换页面元素位置

写在前面&#xff0c;博主是个在北京打拼的码农&#xff0c;从事前端工作5年了&#xff0c;做过十多个大大小小不同类型的项目&#xff0c;最近心血来潮在这儿写点东西&#xff0c;欢迎大家多多指教。 对于文章中出现的任何错误请大家批评指出&#xff0c;一定及时修改。有任何…

数据结构 / 顺序表操作 / 顺序表尾部删除

1.实现逻辑 只需要把顺序表的长度减1。 2.顺序表尾部删除函数代码 /**顺序表尾部删除* */int delete_tail(sqlist *list) {if(NULLlist || 1is_list_empty(list)){return -1;}list->len--;return 0;}3. 完整代码 #include <string.h> #include <stdlib.h> #in…

Redis Cluster主从模式详解

在软件的架构中&#xff0c;主从模式&#xff08;Master-Slave&#xff09;是使用较多的一种架构。主&#xff08;Master&#xff09;和从&#xff08;Slave&#xff09;分别部署在不同的服务器上&#xff0c;当主节点服务器写入数据时&#xff0c;同时也会将数据同步至从节点服…

图解算法数据结构-LeetBook-树03_层序遍历奇数偶数行方向不同

一棵圣诞树记作根节点为 root 的二叉树&#xff0c;节点值为该位置装饰彩灯的颜色编号。请按照如下规则记录彩灯装饰结果&#xff1a; 第一层按照从左到右的顺序记录 除第一层外每一层的记录顺序均与上一层相反。即第一层为从左到右&#xff0c;第二层为从右到左。 示例 1&…

自动化测试-Selenium

一. Selenium介绍 selenium 是用来做web自动化测试的框架,支持各种浏览器,各种,支持各种语言 原理: 二. 元素定位 2.1 XPath 定位 绝对路径: /html/head/title 相对路径以双斜杠开头,常见的相对路径定位有以下几种: <1>相对路径索引: 索引是从1开始的 <2>相…

语音识别学习笔记

目录 开源的语音识别项目 端到端的多说话人语音识别序列化训练方法简介 新一代 Kaldi: Two-pass 实时语音识别 开源的语音识别项目 有哪些语音识别的开源项目&#xff1f; - 知乎 端到端的多说话人语音识别序列化训练方法简介 端到端的多说话人语音识别序列化训练方法简介 …

探索深度学习:从理论到实践的全面指南

探索深度学习&#xff1a;从理论到实践的全面指南 摘要&#xff1a; 本文旨在提供一个关于深度学习的全面指南&#xff0c;带领读者从理论基础到实践应用全方位了解这一技术。我们将介绍深度学习的历史、基本原理、常用算法和应用场景&#xff0c;并通过Python代码示例和Tens…

STM32使用多路PWM注意事项

这是使用CubeMX自动产生的代码&#xff0c;使用TIM2产生了PA0,PA1,PA2,PA3这4路PWM&#xff0c;可以看到里面Pulse是共同使用了一个sConfigOC,如果是需要动态调整Pulse&#xff0c;就需要特别注意。 如果是用来产生呼吸灯&#xff0c;就会把这4个PWM都打乱&#xff0c;我觉得&a…

Go查询Elasticsearch

在 Go 中需要在 Elasticsearch 中执行带有过滤条件的查询时&#xff0c;你可以使用 github.com/olivere/elastic 库的过滤器&#xff08;Filter&#xff09;功能。以下是一个示例代码&#xff0c;展示了如何在 Go 中使用 Elasticsearch 进行带有过滤条件的分页查询&#xff1a;…

【nlp】4.4 Transformer库的使用(管道模式pipline、自动模式auto,具体模型BertModel)

Transformer库的使用 1 了解Transformers库2 Transformers库三层应用结构3 管道方式完成多种NLP任务3.1 文本分类任务3.2 特征提取任务3.3 完型填空任务3.4 阅读理解任务3.5 文本摘要任务3.6 NER任务4 自动模型方式完成多种NLP任务4.1 文本分类任务4.2 特征提取任务4.3 完型填空…