首页 > 其他分享 >延时队列(RabbitMQ)

延时队列(RabbitMQ)

时间:2024-10-24 17:21:32浏览次数:8  
标签:队列 绑定 RabbitMQ 过期 死信 交换机 消息 延时

1.概述

延时任务,也叫延迟任务

延迟队列:没有固定的开始时间,它常常是由一个事件触发的,而在这个事件触发之后的一段时间内触发另一个事件,任务可以立即执行,也可以延迟。

2.技术选型

RabbitMQ(死信交换机)实现方式 TTL+私信交换机

1.概述

死信队列:存放死信的队列

死信交换机: 绑定死信队列的交换机

2.成为死信的几种情况

消费者使用 basic.reject 或 basic.nack 声明消费失败,并且消息的 requeue 参数设置为false - 消费者消费消息失败,并且不把消息重回队列

消息设置了过期时间,或者消息存放的队列设置了过期时间,超过时间无人消费 - 消息和队列如果同时都设置了过期时间,以时间短的为准

要投递的队列消息满了,无法投递

3.死信交换机

1.概述

如果这个包含死信的队列配置了 dead-letter-exchange 属性,指定了一个交换机,那么正常队列中的死信就会投递到这个交换机中,而这个交换机称为 死信交换机 (Dead Letter Exchange,检查DLX)。

2.死信的路由过程

1、消费者拒绝消费消息

2、队列绑定了死信交换机

3、死信队列有绑定的死信交换机

实现上述功能的条件

1、死信交换机的名称

2、死信交换机与死信队列绑定的 RoutingKey

3.TTL

1.概述

超时未消费,消息变成死信的两种情况
1、消息所在的队列设置了超时时间
2、消息本身设置了超时时间
如果两者都设置了,以短的时间为优先

2.原理图

4.延时队列

1、声明死信交换机和死信队列

2、声明普通交换机和普通队列、绑定关系

3、发消息

不指定消息过期时间

指定消息过期时间

标签:队列,绑定,RabbitMQ,过期,死信,交换机,消息,延时
From: https://www.cnblogs.com/freps/p/18500012

相关文章

  • 【数据结构与算法】之队列详解
    队列(Queue)是一种重要的线性数据结构,遵循先进先出、后进后出的原则。本文将更详细地介绍队列的概念、特点、Java实现以及应用场景。模运算小复习:a%b的值总是小于b5%4=1  5 %2=11%5=1  4%5=41.队列概念概述想象一下排队买票,先排队的人总是先买......
  • 常用的 RabbitMQ 插件
    RabbitMQ支持许多插件,这些插件可以扩展RabbitMQ的功能和特性。以下是一些常用的RabbitMQ插件:1、ManagementPlugin:RabbitMQ管理插件提供了一个Web管理界面,用于监控和管理RabbitMQ服务器。可以查看队列、交换机、连接、通道等的状态,并进行配置和操作。2、ShovelPlugi......
  • RabbitMQ总结
    重试机制背景线上的系统(SpringBoot2.2.11,rabbitmq为3.2.0),某一天突然有大量的错误日志写入,进几台服务器的硬盘都写满了。查看日志发现是RabbitMQ的消费者在接收消息消费时,抛出了异常错误,此时会不断重新进入消费重新打印错误日志,循环如此进硬盘写满了。RabbitMQ的消息重试机......
  • 【C++篇】栈的层叠与队列的流动:在 STL 的韵律中探寻数据结构的优雅之舞
    文章目录C++栈与队列详解:基础与进阶应用前言第一章:栈的介绍与使用1.1栈的介绍1.2栈的使用1.2.1最小栈1.2.2示例与输出1.3栈的模拟实现第二章:队列的介绍与使用2.1队列的介绍2.2队列的使用2.2.1示例与输出2.3队列的模拟实现2.3.1示例与输出第三章:优先队......
  • 225. 用队列实现栈
    classMyStack{public:MyStack():q1(queue<int>()),q2(queue<int>()){}voidpush(intx){q1.push(x);}intpop(){intret;if(q1.size()==1){ret=q1.front(......
  • 在使用 RabbitMQ 作为消息代理时,多个 Celery 实例(或应用)可以共享同一个 RabbitMQ 实例
    在使用RabbitMQ作为消息代理时,多个Celery实例(或应用)可以共享同一个RabbitMQ实例。这样做可以简化基础设施管理,同时允许不同的Celery应用之间进行消息传递和协作。下面是如何配置多个Celery实例以使用同一个RabbitMQ实例的步骤:1.安装依赖确保你的Python环......
  • RabbitMQ是一个开源的消息代理和队列服务器
    RabbitMQ是一个开源的消息代理和队列服务器,它基于AMQP(AdvancedMessageQueuingProtocol,高级消息队列协议)协议实现,同时也支持其他消息协议如STOMP、MQTT等。作为一个可靠的消息传递服务,RabbitMQ在分布式系统中广泛应用于异步处理、应用解耦、流量控制等场景。以下是对Rabb......
  • 数据结构C语言版_队列笔记||已测试所有代码均可运行
    队列源文件使用markdown编写,CSDN文章发布好像有部分语法改变。每一部分我都有加一个返回标题好像不能使用了。但是CSDN自带一个目录总结,你们无视掉我写的目录直接用CSDN的吧。总结笔记不易,如果有帮助到你希望点个赞。所有代码均已在VScode中运行过,部分代码块因为格式原因......
  • 一个基于队列、多线程的文件转换程序
    importcv2importosimportnumpyasnpimportargparseimportthreadingimportqueueimportloggingfrommultiprocessingimportValue#配置日志记录logging.basicConfig(level=logging.INFO,format='%(asctime)s===%(levelname)s===%(m......
  • 数据结构-----------栈和队列后续
    1队列1.1概念与结构概念:只允许在一端进行插入数据操作,在另一端进行删除元素特殊的线性表,队列具有先进先出的性质入队列:进行插入操作的的一端叫做队尾出队列:进行删除操作的一端叫做队头下面我们来看一下队列的实现队列其实跟单链表是差不多的只不过队列只允许在队尾插入数......