首页 > 其他分享 >springboot 整合 rabbitMQ (延迟队列)

springboot 整合 rabbitMQ (延迟队列)

时间:2024-11-24 21:58:52浏览次数:9  
标签:springboot 队列 DELAYED rabbitMQ 交换机 延时 public 延迟

前言:

延迟队列是一个内部有序的数据结构,其主要功能体现在其延时特性上。这种队列存储的元素都设定了特定的处理时间,意味着它们需要在规定的时间点或者延迟之后才能被取出并进行相应的处理。简而言之,延时队列被设计用于存放那些需要在特定时间到达时才处理的元素。

使用场景:

1、定时任务调度:在任务调度系统中,延时队列可以用来安排任务在未来的某个时间点执行,比如定时发送邮件、消息推送、定时刷新缓存等。
2、订单超时取消:在电子商务网站中,未在规定时间内完成的订单可以通过延时队列来设置超时取消,如果订单在队列规定的延迟时间内没有被支付,系统将会自动取消订单。
3、消息重试机制:在消息队列中,如果消息处理失败了,可以将消息放入延时队列中,等待一段时间后再次尝试处理,以实现重试机制。
4、缓存数据过期:对于缓存系统,延时队列可以用来管理数据的过期时间,当数据在队列中的时间超过了设定的延迟时间,就将其从缓存中移除。
5、会话管理:在Web应用中,可以使用延时队列来管理用户会话的过期时间,当会话超过设定的有效时间后,系统将自动销毁会话。
6、任务延迟执行:有些任务可能需要在特定的时间窗口之后执行,比如数据分析任务可能需要在当天结束后才能进行,延时队列可以用来实现这种延迟执行。
7、权限验证Token过期:在安全系统中,发放的Token通常有有效时间,延时队列可以用来检测Token是否过期,并在过期时将其从系统中移除。

配置类:

配置文件

启动创建延迟队列和交换机

/**
 * 延迟队列
 */
@Configuration
public class DelayedQueueConfig {
    /** 队列 */
    public static final String DELAYED_QUEUE_NAME="delayed_queue";
    /** 交换机 */
    public static final String DELAYED_EXCHANGE_NAME="delayed_exchange";
    /** 交换机类型 */
    public static final String DELAYED_EXCHANGE_TYPE="x-delayed-message";
    /** 交换机路由键 */
    public static final String DELAYED_ROUTING_KEY="delayed";

    /** 声明延迟队列 */
    @Bean
    public Queue delayedQueue() {
        return new Queue(DELAYED_QUEUE_NAME);
    }

    /** 声明延迟队列交换机 */
    @Bean
    public CustomExchange delayedExchange() {
        Map<String, Object> map = new HashMap<>();
        map.put("x-delayed-type", "direct");
        /**
         * 声明自定义交换机
         * 第一个参数: 交换机名称
         * 第二个参数: 交换机类型
         * 第三个参数: 是否需要持久化
         * 第四个参数: 是否自动删除
         * 第五个参数: 其他参数
         */
        return new CustomExchange(DELAYED_EXCHANGE_NAME, DELAYED_EXCHANGE_TYPE, true, false, map);
    }

    /** 绑定队列和延迟交换机 */
    @Bean
    public Binding delayedQueueBindingDelayedExchange(
            @Qualifier("delayedQueue") Queue delayedQueue,
            @Qualifier("delayedExchange") Exchange delayedExchange
    ) {
        return BindingBuilder.bind(delayedQueue).to(delayedExchange).with(DELAYED_ROUTING_KEY).noargs();
    }

}

生产者: 

        示例:商城项目生成订单后超过30分钟不支付自动取消订单

        第一个参数:交换机名称

        第二个参数:路由键

        第三个参数:消息体

        第四个参数:消息后处理器

//将订单id放入延迟队列 延迟30分钟后没有支付取消订单 释放库存          

rabbitTemplate.convertAndSend(DelayedQueueConfig.DELAYED_EXCHANGE_NAME,DelayedQueueConfig.DELAYED_ROUTING_KEY,mallOrder.getId(),message -> {
                //设置到期时间 方便测试这里设置30秒
                message.getMessageProperties().setDelay(10000);
                return message;
            });

消费者:

@RabbitListener(queuesToDeclare =@Queue(DelayedQueueConfig.DELAYED_QUEUE_NAME))
    public void consume(Integer orderId, Message message, Channel channel) {
        log.info("延时队列监听到消息,订单id为:{}", orderId);
        long deliveryTag = message.getMessageProperties().getDeliveryTag();
        //接收消息后代码
        
        try {
            //手动提交
            channel.basicAck(deliveryTag, false);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

标签:springboot,队列,DELAYED,rabbitMQ,交换机,延时,public,延迟
From: https://blog.csdn.net/WYH1233211234567/article/details/144014278

相关文章

  • Springboot如何利用模板,快速生成word文档?
    前言大家好,我是小徐啊。我们在使用SpringBoot开发的时候,有时候会遇到需要生成word文档的情况。一般情况下,就是将一些数据填充到word文档里面。其实Java是有开源的第三方jar包的。今天,小徐就来介绍下如何在SpringBoot里面生成word文档。如何设置首先,我们需要在pom.xml文件里面,引......
  • 【Z240005】基于SpringBoot+Vue+MySQL实现的家具电子商城系统的设计与实现
    基于SpringBoot+Vue实现的家具电子商城系统1.项目描述2.运行环境3.项目技术4.界面展示5.源码获取1.项目描述基于SpringBoot+Vue实现的家具商城系统分为管理员端和用户端,管理员实现了个人中心、用户管理、家具类型管理、家具信息管理、轮播图管理、公告管理、订单管......
  • 【深入理解RabbitMQ】七大工作模式
    文章目录七种工作模式介绍简单模式基本概念代码实现工作队列模式基本概念代码实现发布订阅模式基本概念代码实现路由模式基本概念代码实现通配符模式基本概念代码实现`RPC`(远程过程调用模式)基本概念代码实现`PublisherConfirms`(发布确认模式)`MQ`是如何保证消息的......
  • RabbitMQ5:Fanout交换机、Direct交换机、Topic交换机
    欢迎来到“雪碧聊技术”CSDN博客!在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将不断探索Java的深邃世界,分享最新的技术动态、实战经验以及项目......
  • springboot毕设混合式学习系统源码+论文+部署
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着信息技术的飞速发展,教育领域正经历着深刻的变革。传统的纯面对面教学模式存在一定的局限性,例如教学资源的传播范围受限、教学时间和空间相对......
  • springboot毕设大学生心理测评系统程序+论文+部署
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着社会的发展和竞争的加剧,大学生面临着各种各样的挑战,如学业压力、人际关系、职业规划等。这些挑战可能会对大学生的心理健康产生负面影响,导致......
  • 基于SpringBoot+Vue的网上书店系统的设计与实现(源码+lw+部署+讲解)
    文章目录1.前言2.详细视频演示3.具体实现截图4.技术可行性分析5.技术简介5.1后端框架SpringBoot5.2前端框架Vue5.3系统开发平台6.系统架构设计7.程序操作流程8.业务流程设计9.为什么选择我们9.1自己的公众号9.2海量实战案例10.代码参考11.数据库参考12.源码及文档获取......
  • 基于SpringBoot+Vue的数码产品商城系统的设计与实现(源码+lw+部署+讲解)
    文章目录1.前言2.详细视频演示3.具体实现截图4.技术可行性分析5.技术简介5.1后端框架SpringBoot5.2前端框架Vue5.3系统开发平台6.系统架构设计7.程序操作流程8.业务流程设计9.为什么选择我们9.1自己的公众号9.2海量实战案例10.代码参考11.数据库参考12.源码及文档获取......
  • springboot毕设地铁安防管理系统的设计与实现程序+论文+部署
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着城市的发展,地铁成为人们日常出行的重要交通工具。然而,地铁环境复杂、人流量大,这使得地铁安防面临诸多挑战。在国内外,都有许多因地铁安防管理......
  • springboot毕设高校请假管理系统源码+论文+部署
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着高校规模的不断扩大,学生数量日益增多,传统的请假管理方式面临着诸多挑战。在传统模式下,学生请假往往依赖纸质请假条,这一过程涉及填写、递交、......