当前位置:   article > 正文

Rabbitmq两种实现延迟队列方式----死信和延迟插件_rabbitmq3.3延迟队列插件

rabbitmq3.3延迟队列插件

Rabbitmq两种实现延迟队列方式----死信和延迟插件

每天多学一点点~
话不多说,这就开始吧…

1.前言

平时工作中用到延迟队列的地方还是蛮多的;这里介绍下两种方式;一种通过死信队列转延迟队列;一种直接安装延迟插件实现延迟队列。

2.死信队列转延迟队列

在这里插入图片描述
以下直接在控制台声明了

  1. 正常交换机 zjq.test.dlx.normal.exchange fanout
  2. 死信交换机 zjq.test.dlx.exchange fanout
  3. 正常队列 zjq.test.dlx.normal.queue
  4. 死信队列 zjq.test.dlx.queue

步骤:

  1. 正常交换器 绑定 正常队列
  2. 正常队列 绑定 死信交换机 (加上2个参数 1. ttl:10s 就是过期时间,即延迟时间 2.x-dead-letter-exchange:zjq.test.dlx.exchange 绑定死信交换机 )
  3. 死信交换机 绑定 死信队列
  4. 只监听死信队列,不监听正常队列
  5. 往 正常交换机 发信消息 ,推到正常队列;正常队列没人消费,10s过后,转到 死信交换机 ,推到死信 队列 ,然后消费死信队列,实现延迟队列功能

在这里插入图片描述

这种还是比较麻烦的,要声明2个交换机+2个队列

3.延迟插件实现延迟队列

3.1 插件安装

下载对应版本的插件 rabbitmq_delayed_message_exchange-3.7.9.ez,
放入 RabbitMQ安装目录下的 plugins 目录。 进入RabbitMQ安装目录下的 sbin目录,在cmd窗口下执行如下命令使插件生效 如果后面发现在未失效请重启服务再查看

rabbitmq-plugins enable rabbitmq_delayed_message_exchange
  • 1

在这里插入图片描述

3.2 控制台声明推消息

  1. 延迟交换机 zjq.test.delay.exchange type:x-delayed-message Arguments x-delayed-type:topic
  2. 延迟队列 zjq.test.delay.queue
  3. 延迟交换机 绑定 延迟队列
    在这里插入图片描述
    推消息。因为博主这里声明的是fanout,所以没有routing key。
    header上加上参数 x-delay:10000 延迟时间
    在这里插入图片描述

3.3 代码声明

声明交换机

  @Bean
    public CustomExchange delayExchange() {
        Map<String, Object> args = new HashMap<>();
        args.put("x-delayed-type", "fanout");
        return new CustomExchange(MqConst.ORDER_TO_PRODUCT_DELAY_EXCHANGE_NAME, "x-delayed-message", true, false, args);
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

发送消息

    public void senderDelayCheckMsg(MsgTxtBo msgTxtBo) {
        log.info("发送的消息ID:{}", msgTxtBo.getOrderNo());
        //表示为延时消息   加了 _delay 后缀 普通写法
        CorrelationData correlationData = new CorrelationData(msgTxtBo.getMsgId() + "_" + msgTxtBo.getOrderNo() + "_delay");
        // lamada  表达式写法  延迟 发送
        rabbitTemplate.convertAndSend(MqConst.ORDER_TO_PRODUCT_DELAY_EXCHANGE_NAME, MqConst.ORDER_TO_PRODUCT_DELAY_ROUTING_KEY,
                msgTxtBo, message -> {
            // 设置这个才有用
            message.getMessageProperties().setHeader("x-delay", 10000);
            return message;
        },correlationData);
       
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

4.结语

世上无难事,只怕有心人,每天积累一点点,fighting!!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/574986
推荐阅读
相关标签
  

闽ICP备14008679号