美文网首页
RabbitMQ延迟队列实践

RabbitMQ延迟队列实践

作者: Java_xiaoman | 来源:发表于2020-12-04 10:57 被阅读0次

    最近接到一个需求,要求在数据状态变更10分钟后向用户推送一条微信消息;

    分析: 按照传统做法,这个可能要使用定时任务去扫描对应表中的数据,但是这样做会造成两个问题:
    1.频繁扫描数据库,会增加数据库开销;
    2.对于10分钟的时间上面不是那么准确;

    这里使用RabbitMQ的延迟队列来实现:
    实现步骤:
    主要是在RabbitMQ控制台完成,也可以使用代码,我比较懒;
    1.新建Exchange,用来分发消息


    image.png

    2.创建消费队列,用来承接延迟队列里面时间到期后的数据;
    这里的队列就是一个普通的消费队列,用来进行正常的业务;


    image.png

    3.创建延迟队列,用来存储对应时间的数据
    注意下面这三个参数
    x-dead-letter-exchange --这个暂时用不到,但是不写创建不了延迟队列;
    x-dead-letter-routing-key --这个表示此延迟队列的时间到期后往哪个队列里面放;
    这里是放到上面创建的消费队列中;
    x-message-ttl --这是消息过期时间,单位是毫秒;


    image.png

    4.延迟队列绑定Exchange
    将延迟队列绑定在上面创建的Exchange上面,注意要有个Routing kyy,在代码里面推消息的时候要使用,这样Exchange才能识别将消息给哪个延迟队列;


    image.png

    5.代码中将消息推到Exchange就好,会分发到对应Routing key绑定的队列,然后到时间后会转放到消费队列,进行正常的业务;


    image.png

    相关文章

      网友评论

          本文标题:RabbitMQ延迟队列实践

          本文链接:https://www.haomeiwen.com/subject/tubbwktx.html