IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> springboot整合rabbitMq之延迟队列相关使用 -> 正文阅读

[大数据]springboot整合rabbitMq之延迟队列相关使用

RabbitMq 延迟队列

延时队列,队列内部是有序的,最重要的特性就体现在它的延时属性上,延时队列中的元素是希望
在指定时间到了以后或之前取出和处理,简单来说,延时队列就是用来存放需要在指定时间被处理的元素的队列。

使用场景

  1. 订单在十分钟之内未支付则自动取消 新创建的店铺,如果在十天内都没有上传过商品,则自动发送消息提醒。
  2. 用户注册成功后,如果三天内没有登陆则进行短信提醒。
  3. 用户发起退款,如果三天内没有得到处理则通知相关运营人员。
  4. 预定会议后,需要在预定的时间点前十分钟通知各个与会人员参加会议

延迟队列构架图

下边的代码是按照这样的构架写的

在这里插入图片描述

声明交换机和相关队列

@Configuration
public class TtlQueueConfig {

    /**
     * 普通交换机名称
     */
    public static final String X_EXCHANGE="X";
    /**
     * 死信交换机名称
     */
    public static final String Y_DEAD_LETTER_EXCHANGE="Y";
    /**
     * 延迟队列C
     */
    public static final String QUEUE_C="QC";
    /**
     * 死信队列
     */
    public static final String DEAD_LETTER_QUEUE="QD";

    /**
     * xExechange
     * @return
     */
    @Bean("xExechange")
    public DirectExchange xExechange(){
        return new DirectExchange(X_EXCHANGE);
    }

    /**
     * yExechange
     * @return
     */
    @Bean("yExechange")
    public DirectExchange yExechange(){
        return new DirectExchange(Y_DEAD_LETTER_EXCHANGE);
    }

    /**
     *
     * @return
     */
    @Bean("queueC")
    public Queue queueC(){
        HashMap<String, Object> hashMap = Maps.newHashMap();
        hashMap.put("x-dead-letter-exchange",Y_DEAD_LETTER_EXCHANGE);
        hashMap.put("x-dead-letter-routing-key","YD");
        return QueueBuilder.durable(QUEUE_C).withArguments(hashMap).build();
    }

    /**
     * queueD
     * @return
     */
    @Bean("queueD")
    public Queue queueD(){
        return QueueBuilder.durable(DEAD_LETTER_QUEUE).build();
    }


    /**
     *
     * @param queueC
     * @param xExechange
     * @return
     */
    @Bean
    public Binding queueCBindingX(@Qualifier("queueC") Queue queueC,
                                  @Qualifier("xExechange")DirectExchange xExechange){
        return BindingBuilder.bind(queueC).to(xExechange).with("XC");
    }

    /**
     * queueDBindingY
     * @param queueD
     * @param xExechange
     * @return
     */
    @Bean
    public Binding queueDBindingY(@Qualifier("queueD") Queue queueD,
                                  @Qualifier("yExechange")DirectExchange xExechange){
        return BindingBuilder.bind(queueD).to(xExechange).with("YD");
    }
}

消息生产者代码编写

@RestController
@RequestMapping("/send/message/")
public class SendMessageController {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    @GetMapping("{msg}/{ttlTime}")
    public String sendMessage(@PathVariable("msg") final String msg, @PathVariable("ttlTime")String ttlTime){
        // 发送消息到指定队列中
        rabbitTemplate.convertAndSend(TtlQueueConfig.X_EXCHANGE,"XC",msg,message->{
            message.getMessageProperties().setExpiration(ttlTime);
            return message;
        });
        return msg;
    }
}

消息消费者代码编写

@Slf4j
@Component
public class DeadLetterQueueCustomer {
    /**
     * 消费消息
     * @param message
     * @param channel
     */
    @RabbitListener(queues = TtlQueueConfig.DEAD_LETTER_QUEUE)
    public void received(Message message, Channel channel){
        String msg = new String(message.getBody());
        System.out.println("msg = " + msg);
    }
}

启动项目

在浏览器中输入对应的url地址发送消息和消息延迟时间,在对应的时间之后就会获取到相关的消息

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-28 09:24:49  更:2021-08-28 09:26:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:35:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码