RabbitMQ-延迟交换器

rabbitmq死信队列,消息延迟消费 rabbitmq中如果消息被拒绝,或消息过期,或极端情况队列达到最大长度,这时消息就变成了死信,死信消息可以通过队列绑定死信交换器,从而将消息路由到死信交换器绑定的队列里。 public static void main(String[] argv) throws Exception { ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); try (Connection 阅读详情

在之前的延迟场景中,消息放入延迟队列的时间都是相同的。比如京东下单后,最大等待24小时进行付款。如果超过24小时还没有付款,那么订单将会被取消。由于下单后使用固定的时间等待。直接采用延迟队列没有任何问题。那如果是会议预订系统的提前20分钟通知功能呢?比如产品经理预订一个会议订在11点,到了10点45分(提前15分钟)的时候就会通知所有参会人员做好准备。会议会在15分钟后开始。如果我们将此通知放入延迟队列。会是什么样子呢?

在这里插入图片描述

通过分析可以发现,如果将消息放入延迟队列,由于延迟队列是顺序消费的特性,即按照顺序一个一个的消费。以图为例,可以发现,排在队首的是延迟30秒,会被最先消费,而第一个消费完,第二个和第三个都已经过期了。这时候再通知已经没有意义了。采用延迟队列是不行的。

在RabbitMQ中,可以使用rabbitmq_delayed_message_exchange插件来实现。

这里和TTL方式有很大的不同就是TTL存放的是死信队列(deayquque),而这个插件存放的消息是在延迟交换器里(x-delayed-message-exchange)

在这里插入图片描述

  1. 生产者将消息和路由键发送至指定的延迟交换器上

  2. 延迟交换器将存储消息等待消息到期根据路由键绑定到自己的队列将把消息给它。

  3. 队列再把消息发给给监听它的消费者。

  4. 下载插件

下载地址:https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases/tag/3.8.9

在这里插入图片描述

  1. 安装及启用插件

将插件拷贝到rabbitMQ-server的安装路径:/usr/lib/rabbitmq/lib/rabbitmq_server-3.8.5/plugins/

cd /usr/lib/rabbitmq/lib/rabbitmq_server-3.8.5/plugins/

# 检查插件
[root@nullnull-os plugins]# find . -name "*delayed*"
./rabbitmq_delayed_message_exchange-3.8.9-0199d11c.ez

# 检查插件
rabbitmq-plugins list
# 启动插件
rabbitmq-plugins enable rabbitmq_delayed_message_exchange

启用插件过程

[root@nullnull-os plugins]# find . -name "*delayed*"
./rabbitmq_delayed_message_exchange-3.8.9-0199d11c.ez
[root@nullnull-os plugins]# rabbitmq-plugins list
Listing plugins with pattern ".*" ...
 Configured: E = explicitly enabled; e = implicitly enabled
 | Status: * = running on rabbit@nullnull-os
 |/
[  ] rabbitmq_amqp1_0                  3.8.5
[  ] rabbitmq_auth_backend_cache       3.8.5
[  ] rabbitmq_auth_backend_http        3.8.5
[  ] rabbitmq_auth_backend_ldap        3.8.5
[  ] rabbitmq_auth_backend_oauth2      3.8.5
[  ] rabbitmq_auth_mechanism_ssl       3.8.5
[  ] rabbitmq_consistent_hash_exchange 3.8.5
[  ] rabbitmq_delayed_message_exchange 3.8.9.0199d11c
[  ] rabbitmq_event_exchange           3.8.5
[  ] rabbitmq_federation               3.8.5
[  ] rabbitmq_federation_management    3.8.5
[  ] rabbitmq_jms_topic_exchange       3.8.5
[E*] rabbitmq_management               3.8.5
[e*] rabbitmq_management_agent         3.8.5
[  ] rabbitmq_mqtt                     3.8.5
[  ] rabbitmq_peer_discovery_aws       3.8.5
[  ] rabbitmq_peer_discovery_common    3.8.5
[  ] rabbitmq_peer_discovery_consul    3.8.5
[  ] rabbitmq_peer_discovery_etcd      3.8.5
[  ] rabbitmq_peer_discovery_k8s       3.8.5
[  ] rabbitmq_prometheus               3.8.5
[  ] rabbitmq_random_exchange          3.8.5
[  ] rabbitmq_recent_history_exchange  3.8.5
[  ] rabbitmq_sharding                 3.8.5
[  ] rabbitmq_shovel                   3.8.5
[  ] rabbitmq_shovel_management        3.8.5
[  ] rabbitmq_stomp                    3.8.5
[  ] rabbitmq_top                      3.8.5
[E*] rabbitmq_tracing                  3.8.5
[  ] rabbitmq_trust_store              3.8.5
[e*] rabbitmq_web_dispatch             3.8.5
[  ] rabbitmq_web_mqtt                 3.8.5
[  ] rabbitmq_web_mqtt_examples        3.8.5
[  ] rabbitmq_web_stomp                3.8.5
[  ] rabbitmq_web_stomp_examples       3.8.5
[root@nullnull-os plugins]# rabbitmq-plugins enable rabbitmq_delayed_message_exchange
Enabling plugins on node rabbit@nullnull-os:
rabbitmq_delayed_message_exchange
The following plugins have been configured:
  rabbitmq_delayed_message_exchange
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_tracing
  rabbitmq_web_dispatch
Applying plugin configuration to rabbit@nullnull-os...
The following plugins have been enabled:
  rabbitmq_delayed_message_exchange

started 1 plugins.
[root@nullnull-os plugins]# 

如果在未启动的情况下安装插件,在重启后才能生效

systemctl restart rabbitmq-server

maven导入

       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
            <version>2.2.8.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.2.8.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <version>2.2.8.RELEASE</version>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.amqp</groupId>
            <artifactId>spring-rabbit-test</artifactId>
            <version>2.2.7.RELEASE</version>
            <scope>test</scope>
        </dependency>

springBoot的配制

application.yml

spring:
  application:
    name: delayedQueue
  rabbitmq:
    host: node1
    port: 5672
    virtual-host: /
    username: root
    password: 123456

主入口

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DelayExchangeApplication {
  public static void main(String[] args) {
    SpringApplication.run(DelayExchangeApplication.class, args);
  }
}

队列配制

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.CustomExchange;
import org.springframework.amqp.core.Exchange;
import org.springframework.amqp.core.ExchangeTypes;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;

@Configuration
@RabbitListener
@ComponentScan("com.nullnull.learn")
public class DelayConfig {

  @Bean
  public Queue queue() {
    Queue queue = new Queue("delay.qu", false, false, true, null);
    return queue;
  }

  @Bean
  public Exchange exchange() {
    Map<String, Object> argument = new HashMap<>();
    argument.put("x-delayed-type", ExchangeTypes.FANOUT);
    Exchange exchange = new CustomExchange("delay.ex", "x-delayed-message", true, false, argument);
    return exchange;
  }

  @Bean
  public Binding bind() {
    return BindingBuilder.bind(queue()).to(exchange()).with("delay.rk").noargs();
  }
}

controller代码

import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageProperties;
import org.springframework.amqp.core.MessagePropertiesBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.nio.charset.StandardCharsets;

@RestController
public class DelayController {

  @Autowired private AmqpTemplate template;

  @RequestMapping("/notify/{seconds}")
  public String toMeeting(@PathVariable Integer seconds) throws Exception {

    MessageProperties prop = MessagePropertiesBuilder.newInstance()
            //编码
            .setContentEncoding(StandardCharsets.UTF_8.name())
            //延迟时间
            .setHeader("x-delay", seconds * 1000)
            .build();
    

    byte[] meetContainer = (seconds + "秒后通知部门会议").getBytes(StandardCharsets.UTF_8);
    Message msg = new Message(meetContainer, prop);

    template.convertAndSend("delay.ex", "delay.rk", msg);
    return "已经设定好了通知";
  }
}

监听器代码

import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;


@Component
public class DelayListener {
  @RabbitListener(queues = "delay.qu")
  public void MeetingAlarm(Message msg, Channel channel) throws Exception {
    String alarmMsg = new String(msg.getBody(), msg.getMessageProperties().getContentEncoding());
    System.out.println("收到提醒:" + alarmMsg);
  }
}

启动测试

分钟别在浏览器中输入:

http://127.0.0.1:8080/notify/20

http://127.0.0.1:8080/notify/15

http://127.0.0.1:8080/notify/7

http://127.0.0.1:8080/notify/2

观察控制台输出:

收到提醒:2秒后通知部门会议
收到提醒:7秒后通知部门会议
收到提醒:15秒后通知部门会议
收到提醒:20秒后通知部门会议

查看交换器

在这里插入图片描述

RabbitMQ系列(18)--RabbitMQ基于插件实现延迟队列 2、下载rabbitmq_delayer_message_exchange插件(注:RabbitMQ是什么版本的,下载的插件就得是什么版本的,得对应上,以下截图为官方文档的对插件版本的要求说明)但我们下载插件后就能通过交换机延迟消息的方式来实现消息的延迟了(由步骤8可见,我们验证插件是否安装成功是从Exchange进去的,而不是从Queues进去的)结论:基于测试发现在使用延迟插件的情况下,延迟时间短的消息会被先消费,这证明基于插件的延迟消息达到预期效果。10、基于插件延迟队列的代码实现。 阅读详情

相关推荐

RabbitMQ学习笔记:RabbitMQ延迟队列(DLX、TTL及rabbitmq_delayed_message_exchange插件)

延迟队列存储的对象是对应的延迟消息,所谓的延迟消息是指当消息被发送以后,并不想让消费者立刻拿到消息,而是等待特定时间后,消费者才能拿到这个消息进行消费。 延迟消息使用的场景有很多,比如: 在订单系统中,一个用户下单之后通常有30分钟的时间进行支付,如果30分钟之内没有支付成功,那么这个订单将进行异常处理,这时候就可以使用延迟队列来处理这些订单了。 用户希望通过手机远程遥控家里的智能设备在指定...

OceanSky的专栏 1万+

RabbitMQ 延时队列

一、安装 rabbitmq_delayed_message_exchange 插件 官方下载地址:https://www.rabbitmq.com/community-plugins.html (1) linux下直接安装: 注意: rabbitMQ 中必须是Disc(磁盘型)类型的节点才可以安装延时队列插件, RAM(内存型)类型节点无法安装。 1.通过 rpm -qa|grep rabbit 命令查看当前linux是否安装RabbitMQ [root@linux]# rpm -qa|grep

weixin_36498993的博客 1万+

rabbitmq-delayed-message-exchange:RabbitMQ 的延迟消息传递

RabbitMQ 延迟消息插件 这个插件为 RabbitMQ 添加了延迟消息(或预定消息)。 用户可以声明类型为x-delayed-message的交换,然后发布带有自定义标头x-delay消息,以毫秒为单位表示消息的延迟时间。 消息将在x-delay毫秒后传递到相应的队列。 支持的 RabbitMQ 版本 此插件的最新版本针对 RabbitMQ 3.8.x。 较早的系列。 支持的 Erlang/OTP 版本 此插件,与 RabbitMQ 3.8.16+ 相同。 项目成熟度 这个插件被认为是实验性的,但相当稳定,只要用户意识到它的局限性,就可能适合生产使用。 它存在一些问题,并且在其存在的大约 18 个月内修复了一个基本问题。 众所周知,它对某些用户来说工作得相当好。 它还具有已知的限制(请参阅下面的一节),包括与延迟和消息的复制以及延迟消息的数量相关的限制。 Pivotal 目前还

RabbitMQ(rabbitmq-delayed-message-exchange)实现延时任务

什么是延时任务? 在我们生活中比较常业务见场景的如下:在如上场景中延时周期为固定时段。 另外还有一种延时周期不固定的业务场景如下:业务场景: 平台方发布预运行计划,预计划中需限定申报截至时间, 参与方需在截止前申报各自实际运行计划给平台后由平台统筹运行计划安排。需求分析: 由于是预计划,会存在截至时间不确定的因素。如:在某月1日做了当月4日的预计划,4日计划申报截止时间为3日14:00;但当月2日又新增/更改了当月3日的预计划截至时间,并且每天申报截止时间不是固定时间。因此可能会出现后加的延时任务比之前的延

Di Qiang 的博客 5293

我每天如何使用 ChatGPT

我偶尔会用这个功能作为开始。我本人非常喜欢阅读,让 ChatGPT 来概括所有文章,感觉就像身处于但丁描述的地狱的某个层次那样痛苦。然而,有时一些文章实在是太啰嗦、无聊,或者写得让人不愉快(比如一个无趣记者对一个让人讨厌的人进行的漫无焦点的采访)。我需要获取这些文章中的一些信息,以便保持信息的更新和了解。在晚期资本主义的广告经济下,很多文章只在一个段落里提供新信息,其余都是无聊的填充内容,只是为了展示糟糕的广告,这实在是对人们的时间和生命的一种浪费。我有几次利用 ChatGPT 来。

KevinDai007的博客 3785

【ISP图像处理】Demosaic去马赛克技术演进与边缘优化策略

本文深入解析了ISP图像处理中的Demosaic(去马赛克)技术。从Bayer阵列原理出发,梳理了从双线性插值、Hamilton-Adams边缘导向算法到利用通道相关性与自相似性的技术演进历程,并重点探讨了针对边缘与纹理伪影的优化策略,为工程实践中的算法选型与硬件协同设计提供了专业指导。

weixin_29091445的博客 389

RabbitMQ高级特性之延迟队列(延迟交换器插件)

RabbitMQ高级特性之延迟队列 RabbitMQ高级特性之延迟队列 对每条消息设置过期时间,这样就意味着每条消息的过期时间不相同。 如果我们现在设置的消息如下队列所示,5秒和 1秒的两条消息,此时5秒的过期了,于此期间1秒的消息早就过期了,这样会导致5秒的这个消息还没从队列里删除,1秒的就已经过期了,消费者肯定消费不到。 对于这种情况,该如何解决? 首先生产者在发送消息时候,是首先发送到交换机,然后交换根据不同的key发送到绑定次交换机的不同队列。 那能否在交换器那边根据消息多起时间发送到不同的队列呢

. 801

求助:有没有基于pscad的锂电池仿真模型

求助:有没有基于pscad的锂电池仿真模型 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变没有 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写...

qq_38922523的博客 1222

RabbitMQ 延迟消息实战

RabbitMQ 是一个开源消息代理(也称为面向消息的中间件),创建它是为了支持高级消息队列协议 (Advanced Message Queuing Protocol, AMQP)。此后,它通过插件架构进行了扩展,以支持简单(或流式)面向文本的消息协议 (Text Oriented Message Protocol, STOMP)、消息查询遥测传输 (Message Query Telemetry Transport, MQTT) 等协议。

serene的博客 772

Cesium 模拟飞机坠毁功能

Cesium 模拟飞机坠毁功能,粒子模拟

QQhelphelp的博客 1068

【数学建模】 进化计算与群体智能

遗传算法(GA)是一种用于优化和搜索问题的启发式算法。它模拟了自然选择的过程,其中个体通过遗传和变异进行繁殖,逐渐进化出更优的解。基本步骤初始化:生成初始种群。适应度评估:评估种群中每个个体的适应度。选择:根据适应度选择个体进行繁殖。交叉:选定个体对进行基因交换,生成新的后代。变异:对一些个体进行基因变异,以增加多样性。迭代:重复评估和繁殖过程,直至达到停止条件。粒子群优化算法(PSO)是一种基于群体智能的优化算法,由Kennedy和Eberhart于1995年提出。其灵感来源于鸟群觅食的行为。

weixin_42914989的博客 1113

Java面试系列-20道RabbitMQ面试题,消息模型,交换器,可靠性传输,消息确认机制,重复消费问题,死信队列,延迟投递,消息优先级,可靠性,事务管理,持久化机制,批量发送,分发机制,幂等性

1. RabbitMQ的消息模型是什么?请详细解释。 2. RabbitMQ中的交换器(Exchange)有哪些类型?分别适用于什么场景? 3. 如何保证消息的可靠性传输? 4. RabbitMQ中的消息确认机制是什么? 5. 如何处理消息的重复消费问题? 6. RabbitMQ中的死信队列(DLX)是如何工作的? 7. 如何实现消息的延迟投递? 8. 如何在RabbitMQ中实现消息的优先级? 9. 如何实现RabbitMQ的高可用性和负载均衡? 10. 如何在RabbitMQ中实现消息的事务管理?

横竖撇折点 1321

基于 STM32 的全自动洗车监控系统设计与实现

本文提出一种基于 STM32F103RCT6 芯片的全自动洗车监控系统方案,通过多传感器融合与智能控制算法,实现车辆检测、洗车流程自动化及状态远程监控。系统集成硬件选型、电路设计、软件流程及通信功能,可广泛应用于智能洗车场景。

weixin_42300449的博客 964

RabbitMQ 延迟队列,延迟任务,死信队列

延迟任务应用场景 场景一:物联网系统经常会遇到向终端下发命令,如果命令一段时间没有应答,就需要设置成超时。 场景二:订单下单之后30分钟后,如果用户没有付钱,则系统自动取消订单。 场景三:过1分钟给新注册会员的用户,发送注册邮件等。 实现方案 定时任务轮询数据库,看是否有产生新任务,如果产生则消费任务 pcntl_alarm为进程设置一个闹钟信号 swoole的异步高精度定时器:swoole_time_tick(类似javascript的setInterval)和swool

JineD的博客 5589

Claude Code Skills 入门:内置技能与自定义技能开发

│ Skill 的特点 │1. 封装性:把复杂操作封装成简单命令2. 可复用:一次定义,随处使用3. 可定制:支持参数传入4. 可发现:通过 /skill-name 方式调用打个比方,如果说 Claude Code 的基础工具是「原材料」,那 Skills 就是「预制菜」——只需要简单加热(调用),就能得到成品(结果)。你可以创建自己的 Skill 来封装常用操作。Skill 支持参数,通过。

gaoxiang_120的专栏 671

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

rabbitmq 延迟队列_rabbitmq死信队列,消息延迟消费

rabbitmq中如果消息被拒绝,或消息过期,或极端情况队列达到最大长度,这时消息就变成了死信,死信消息可以通过队列绑定死信交换器,从而将消息路由到死信交换器绑定的队列里。public static void main(String[] argv) throws Exception { ConnectionFactory factory = new ConnectionFactor...

weixin_39812577的博客 273

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

RabbitMq交换器和队列

注:生产者和消费者都可以声明一个交换器。如果尝试声明一个已经存在的交换器或者队列,只要声明的参数完全匹配现存的交换器或队列,RabbitMq就可以声明都不做,并成功返回。如果声明的参数不匹配则会抛出异常。 exchangeDeclare() exchange:交换器 type:交换器的类型,常见的如fanout、direct、topic durable:设置是否持久化,true表示持...

qq_30987095的博客 361

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

RabbitMQ 如何实现延迟队列?

延迟队列是指当消息被发送以后,并不是立即执行,而是等待特定的时间后,消费者才会执行该消息。 延迟队列的使用场景有以下几种:未按时支付的订单,30 分钟过期之后取消订单。给活跃度比较低的用户间隔 N 天之后推送消息,提高活跃度。新注册会员的用户,等待几分钟之后发送欢迎邮件等。延迟队列有以下两种实现方式:通过消息过期后进入死信交换器,再由交换器转发到延迟消费队列,实现延迟功能;使用官方提供的延迟插件实现延迟功能。早期,大部分公司都会采用第一种方式,而随着 RabbitMQ 3.5.7(2015 年底发布)的延迟

weixin_54542328的博客 71

Rabbitmq 通过延迟插件实现延迟队列

Rabbitmq 通过延迟插件实现延迟队列 文章目录DLX+TTL 存在时序问题安装延迟插件下载地址安装Java 代码实现 DLX+TTL 存在时序问题 由于队列先入先出的特性. 通过死信队列(DLX)和给每条消息设置过期时间(TTL)来实现延迟队列, 会存在时序问题. 即排在队列头的消息过期使时间如果设置的比较长, 会导致队列后面过期时间比较短的消息, 过期了迟迟不被消费掉. 可以通过给 Rabbitmq 安装延迟插件来实现延迟队列功能 安装延迟插件 下载地址 rabbitmq-delayed-messa

芥末鱿鱼~的博客 1266

RabbitMQ的消息属性与交换器

1.背景介绍 1. 背景介绍 RabbitMQ是一种开源的消息代理服务,它使用AMQP(Advanced Message Queuing Protocol)协议来实现高性能、可靠的消息传递。RabbitMQ的核心功能是提供一种简单、可扩展的方式来处理异步消息,这使得它成为许多分布式系统中的关键组件。 在RabbitMQ中,消息通过交换器(Exchange)和队列(Queue)来传递。消息属性...

AI天才研究院 411

搞懂RabbitMq,涉及消息队列、生产者、消费者、Broker、交换器、死信队列、延迟队列、TTL、工作模式、交换器类型、高可用模式

本文涉及​RabbitMq消息队列概念 工作模式:简单队列、work 模式、发布/订阅模式、路由模式、主题模式 交换机类型:fanout、direct、topic、header 高可用模式:单机模式、普通集群模式、镜像集群模式 ​

weixin_42985390的博客 3265

RabbitMQ延迟队列

1. 延迟队列的使用场景 延迟消费 (a)未按时支付的订单,30分钟过期之后取消订单 (b)给活跃度低的用户间隔N天推送消息 (c)新注册用户1分钟后发送邮件 延迟重试 消费者从队列里消费消息时失败了,但是想要延迟一段时间后自动重试(设想支付宝的支付回调是怎么实现的) 2. 实现延迟队列的方式有两种 通过消息过期后进入死信交换器,再由交...

weixin_30650859的博客 123

【RabbitMq 篇四】-延迟队列(DLX+TTL)

前言 延迟消费在 RabbitMq 没有属性可以设置,只能通过 死信交换器(DLX)和设置过期时间(TTL)结合起来达到延迟的效果,所以我要介绍DLX和TTL以及实现延迟队列。 正文 使用所有框架和中间件的版本 环境 框架 版本 Spring Boot 2.1.5.RELEASE RabbitMq 3.7.15 ...

晏霖/胖虎的博客 1104

Spring Boot(十四)RabbitMQ延迟队列

到此为止我们已经使用“rabbitmq-delayed-message-exchange”插件实现了延迟功能,但是需要注意的一点是,如果使用命令“rabbitmq-plugins disable rabbitmq_delayed_message_exchange”禁用了延迟插件,那么所有未发送的延迟消息都将丢失。

2501_92669908的博客 934

RabbitMQ本身不支持延迟队列

RabbitMQ本身没有延迟队列的支持,但是基于其本身的一些特性,可以做到类似延迟队列的效果:基于死信交换器+TTL。以下介绍下相关概念及方法。

z_ssyy的博客 297
上一篇: RabbitMQ-死信队列
null_null_bug
博客等级 码龄7年 72粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值