• RabbitMQ:基于DelayExchange插件实现延迟队列


    因为延迟队列的需求非常多,所以RabbitMQ的官方也推出了一个插件,原生支持延迟队列效果。

    这个插件就是DelayExchange插件。参考RabbitMQ的插件列表页面:Community Plugins — RabbitMQ

    使用方式可以参考官网地址:Scheduling Messages with RabbitMQ | RabbitMQ - Blog

    下载插件成功后配置到mq:

    因为我是基于Docker安装,所以需要先查看RabbitMQ的插件目录对应的数据卷

    我之前设定的RabbitMQ的数据卷名称为mq-plugins,所以使用下面命令查看数据卷:

    docker volume inspect mq-plugins

     得到下面结果:

     接下来,将插件上传到这个目录即可:

     最后就是安装了,需要进入MQ容器内部来执行安装。我的容器名为mq,所以执行下面命令:

    docker exec -it mq bash

     进入容器内部后,执行下面命令开启插件:

    rabbitmq-plugins enable rabbitmq_delayed_message_exchange

     结果如下:

    DelayExchange插件原理

    DelayExchange需要将一个交换机声明为delayed类型。当我们发送消息到delayExchange时,流程如下:

    • 接收消息

    • 判断消息是否具备x-delay属性

    • 如果有x-delay属性,说明是延迟消息,持久化到硬盘,读取x-delay值,作为延迟时间

    • 返回routing not found结果给消息发送者

    • x-delay时间到期后,重新投递消息到指定队列

    使用DelayExchange

    插件的使用也非常简单:声明一个交换机,交换机的类型可以是任意类型,只需要设定delayed属性为true即可,然后声明队列与其绑定即可。

    1、基于注解方式:

    2、 基于@Bean的方式:

    3、发送消息时,一定要携带x-delay属性,指定延迟的时间

     

  • 相关阅读:
    Linux内核设计与实现 第十二章 内存管理
    socket简介
    MySQL数据库的备份和恢复
    Python刘诗诗
    Spring-AOP底层原理
    没有root权限如何通过apt安装deb软件
    网络舆情监测是干嘛的?
    【Vue】VueX 的语法详解(1)
    Redis入门完整教程:客户端案例分析
    java执行shell命令,Runtime.exec()和jsch谁更有优势?
  • 原文地址:https://blog.csdn.net/A20001230T/article/details/132918424