首页 > 其他分享 >RabbitMQ 实现延时队列

RabbitMQ 实现延时队列

时间:2022-12-07 17:07:24浏览次数:56  
标签:设置 队列 RabbitMQ 死信 消息 延时 TTL 路由


1. 消息的TTL(Time To Live)


消息的 TTL 就是 消息的存活时间 。


RabbitMQ 可以对 队列 和 消息 分别设置 TTL 。


对队列设置就是队列没有消费者连着的保留时间, 也可以对每一个单独的消息做单独的 设置。超过了这个时间,我们认为这个消息就死了,称之为死信 。


如果队列设置了,消息也设置了,那么会 取小的 。所以一个消息如果被路由到不同的队 列中,这个消息死亡的时间有可能不一样(不同的队列设置)。这里单讲单个消息的


TTL,因为它才是实现延迟任务的关键。可以通过设置消息的expiration字段或者x-  message-ttl属性来设置时间,两者是一样的效果。

2. Dead Letter Exchanges(DLX)


一个消息在满足如下条件下,会进 死信路由 ,记住这里是路由而不是队列, 一个路由可以对应很多队列。(什么是死信)


一个消息被 Consumer 拒收了,并且 reject 方法的参数里 requeue 是 false 。也就是说不 会被再次放在队列里,被其他消费者使用 。 basic.reject/ basic.nack requeue=false


上面的消息的 TTL 到了,消息过期了。


队列的长度限制满了。排在前面的消息会被丢弃或者扔到死信路由上


Dead Letter Exchange 其实就是一种普通的 exchange , 和创建其他


exchange没有两样。只是在某一个设置Dead Letter Exchange的队列中有 消息过期了,会自动触发消息的转发,发送到Dead Letter Exchange中去。


我们既可以控制消息在一段时间后变成死信,又可以控制变成死信的消息 被路由到某一个指定的交换机,结合二者,其实就可以实现一个延时队列




3.延时队列实现:

    推荐:




RabbitMQ 实现延时队列_rabbitmq


不推荐:因为RabbitMQ是惰性检查



RabbitMQ 实现延时队列_rabbitmq_02


eg1.

RabbitMQ 实现延时队列_延迟任务_03

eg2.

RabbitMQ 实现延时队列_字段_04

标签:设置,队列,RabbitMQ,死信,消息,延时,TTL,路由
From: https://blog.51cto.com/u_15905340/5919703

相关文章

  • 数据结构:单链队列--队列的链式存储结构
    //测试<divstyle="margin:0px;padding:0px;font-family:punctuation,微软雅黑,Tohoma;font-size:14px;line-height:22px;">/*********************************......
  • java阻塞队列
    1.defBlockingQueue阻塞队列是mq的底层。BlockingQueue阻塞队列,排队拥堵,首先它是一个队列,而一个阻塞队列在数据结构中所起的作用大致如下图所示:2.实现类BlockingQueue阻......
  • 使用python opencv延时摄影
    以下内容和源码使用openai的chatGPT生成。下面是一个示例代码,它使用OpenCV库在Python中实现这个功能。请注意,这个程序需要您先安装OpenCV库。我们设置了摄像头编......
  • 消息队列经典十连问
    简介:大家好,我是枫哥,......
  • 使用Spring Cloud Stream 驱动 RabbitMQ 代码示例
    1、SpringCloudStream官方文档官方配置文档参考:SpringCloudStreamReferenceDocumentationSpringCloudStreamRabbitMQBinderReferenceGuide说明:在网上查......
  • RabbitMQ 6种模式的练习,以及知识梳理
    常用的模式有Simple、Work、Fanout、Direct、Topic、Headers,可以通过设置交换机类型和配置参数来实现各个模式简单模式(Simple)工作模式(Work)工作模式是考虑到多个消......
  • 2、栈和队列
    栈和队列是运算受限的线性表。栈:只能后进来的元素先出去。队列:只能先进来的元素先出去。 1、栈(Stack)后进先出,可以使用数组和单链表实现。入栈:push出栈:pop取出栈......
  • webflux延迟队列逻辑更改过程记录
    title:webflux延迟队列逻辑更改过程记录author:simonLeedate:2022/11/2210:26目录webflux延迟队列逻辑更改过程记录一、问题背景二、当前实现代码三、逻辑详解3......
  • bug处理,rabbitMQ:ERROR 9392 o.s.a.r.l.SimpleMessageListenerContainer : Failed to
    layout:posttitle:bug处理,rabbitMQ:ERROR9392o.s.a.r.l.SimpleMessageListenerContainer:Failedtocheck/redeclareauto-deletequeue(s)date:2022-09-29tags:......
  • 代码随想录——栈与队列
    用栈实现队列题目简单把pop()和peek()中可复用的部分提取出来classMyQueue{Stack<Integer>stackIn;Stack<Integer>stackOut;/**Initialize......