当前位置:首页 > 科技  > 软件

SpringBoot整合RabbitMQ延迟队列&优先级队列详解

来源: 责编: 时间:2023-08-09 23:02:57 515观看
导读延迟队列延迟队列:简单说就是发送出去的消息经过给定的时间后,消费者才能看见消息(消费消息)。这里简单说下步骤:创建一个队列,如:bs-queue, 设置死信交换机(死信交换机路由key(这是可选的))及队列,如:dead-exchange; 消息的消费端

延迟队列

延迟队列:简单说就是发送出去的消息经过给定的时间后,消费者才能看见消息(消费消息)。Sk928资讯网——每日最新资讯28at.com

这里简单说下步骤:Sk928资讯网——每日最新资讯28at.com

  1. 创建一个队列,如:bs-queue, 设置死信交换机(死信交换机路由key(这是可选的))及队列,如:dead-exchange; 消息的消费端监听该dead-queue队列。设置消息有效期参数x-message-ttl参数(值为自己需要延迟的时间,单位:毫秒)。
  2. 发送消息发送到bs-queue上。由于消息消费端监听的是死信队列,所以只需要等待指定的时间后消息会自动被转发到死信队列上(dead-queue)。
  3. 消息的消费端监听dead-queu队列即可。

优先级队列

优先级队列是在RabbitMQ3.5.0之后的版本才支持的。Sk928资讯网——每日最新资讯28at.com

具有高优先级的队列具有高的优先权,优先级高的消息具备优先被消费的特权。Sk928资讯网——每日最新资讯28at.com

队列的优先级通过x-max-priority参数设置。Sk928资讯网——每日最新资讯28at.com

建立一个priority-exchange交换机,类型:direct。Sk928资讯网——每日最新资讯28at.com

图片图片Sk928资讯网——每日最新资讯28at.com

建立一个priority-queue队列,并与priority-exchange绑定。Sk928资讯网——每日最新资讯28at.com

图片图片Sk928资讯网——每日最新资讯28at.com

设置x-max-priority参数的值为100,表示最大优先级为100。Sk928资讯网——每日最新资讯28at.com

注意:x-max-priority参数的值应该介于1到255。建议使用1到10之间的队列。如果设置的优先级更大将使用更多的Erlang进程消耗更多的CPU资源。运行时调度也会受到影响。Sk928资讯网——每日最新资讯28at.com

接下来演示优先级队列Sk928资讯网——每日最新资讯28at.com

我们先只发送消息,然后再把消息的消费功能打开。Sk928资讯网——每日最新资讯28at.com

发送消息接口:Sk928资讯网——每日最新资讯28at.com

@GetMapping("/sendPriority")public Object sendPriority(String msg, Integer priority) {  ms.sendPriorityQueue(msg, priority) ;  return "success" ;}public void sendPriorityQueue(String msg, Integer priority) {  logger.info("准备发送消息:{}", msg);  Message message = MessageBuilder.withBody(msg.getBytes()).setPriority(priority).build() ;  rabbitTemplate.convertAndSend("priority-exchange", "pe.msg", message) ;}

发送4条消息:Sk928资讯网——每日最新资讯28at.com

// 第一条消息msg=第一条消息&priority=2 // 第二条消息msg=第二条消息&priority=10// 第三条消息msg=第三条消息&priority=1// 第四条消息msg=第四条消息&priority=7

查看消息队列:Sk928资讯网——每日最新资讯28at.com

图片图片Sk928资讯网——每日最新资讯28at.com

消息消费端:Sk928资讯网——每日最新资讯28at.com

@RabbitListener(queues = { "priority-queue" })@RabbitHandlerpublic void listenerPriority(Message message, Channel channel) {  System.out.println("接受到消息.....income");  byte[] body = message.getBody();  MessageProperties mps = message.getMessageProperties();  String content = new String(body, Charset.forName("UTF-8"));  try {    System.out.println("接受到消息来自交换机: 【" + mps.getReceivedExchange() + "】, 队列:【" + mps.getConsumerQueue()+ "】:/n内容: " + content);    channel.basicAck(message.getMessageProperties().getDeliveryTag(), true);  } catch (Exception e) {    e.printStackTrace();    try {      channel.basicReject(mps.getDeliveryTag(), false);    } catch (IOException e1) {      e1.printStackTrace() ;    }  }}

启动服务Sk928资讯网——每日最新资讯28at.com

图片图片Sk928资讯网——每日最新资讯28at.com

根据打印出的结果,正好是我们设置优先级的顺序输出。Sk928资讯网——每日最新资讯28at.com

上面设置的消息优先级都是在指定的范围<100,如果消息的优先级超过这个值会怎么样呢?Sk928资讯网——每日最新资讯28at.com

发送8条消息:Sk928资讯网——每日最新资讯28at.com

// 第一条消息msg=第一条消息&priority=2 // 第二条消息msg=第二条消息&priority=10// 第三条消息msg=第三条消息&priority=1// 第四条消息msg=第四条消息&priority=7// 第五条消息msg=第五条消息&priority=101

消费消息:Sk928资讯网——每日最新资讯28at.com

图片图片Sk928资讯网——每日最新资讯28at.com

同样是按照顺序输出的。Sk928资讯网——每日最新资讯28at.com


Sk928资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-5153-0.htmlSpringBoot整合RabbitMQ延迟队列&amp;优先级队列详解

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 如何使用Asp.net Core实现定时任务,轻松解决任务调度问题!

下一篇: SpringBoot3进阶用法,你学会了吗?

标签:
  • 热门焦点
  • 6月安卓手机性价比榜:Note 12 Turbo断层式碾压

    6月份有一个618,虽然这是京东周年庆的日子,但别的电商也都不约而同的跟进了,反正促销没坏处,厂商和用户都能满意。618期间一些产品也出现了历史低价,那么各个价位段的产品性价比
  • 0糖0卡0脂 旭日森林仙草乌龙茶优惠:15瓶到手29元

    旭日森林无糖仙草乌龙茶510ml*15瓶平时要卖为79.9元,今日下单领取50元优惠券,到手价为29.9元。产品规格:0糖0卡0脂,添加草本仙草汁,清凉爽口,富含茶多酚,保留
  • 三言两语说透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是两种很有用的技术,可以帮助我们写出更加优雅、泛用的函数。本文将首先介绍柯里化和反柯里化的概念、实现原理和应用
  • 微信语音大揭秘:为什么禁止转发?

    大家好,我是你们的小米。今天,我要和大家聊一个有趣的话题:为什么微信语音不可以转发?这是一个我们经常在日常使用中遇到的问题,也是一个让很多人好奇的问题。让我们一起来揭开这
  • 签约井川里予、何丹彤,单视频点赞近千万,MCN黑马永恒文希快速崛起!

    来源:视听观察永恒文希传媒作为一家MCN公司,说起它的名字来,可能大家会觉得有点儿陌生,但是说出来下面一串的名字之后,或许大家就会感到震惊,原来这么多网红,都签约这家公司了。根
  • ESG的面子与里子

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之三伏大幕拉起,各地高温预警不绝,但处于厄尔尼诺大&ldquo;烤&rdquo;之下的除了众生,还有各大企业发布的ESG报告。ESG是&ldquo;环境保
  • 华为发布HarmonyOS 4:更好玩、更流畅、更安全

    在8月4日的华为开发者大会2023(HDC.Together)大会上,HarmonyOS 4正式发布。自2019年发布以来,HarmonyOS一直以用户为中心,经历四年多的发展HarmonyOS已
  • 联想YOGA 16s 2022笔记本将要推出,屏幕支持触控功能

    联想此前宣布,将于11月2日19:30召开联想秋季轻薄新品发布会,推出联想 YOGA 16s 2022 笔记本等新品。官方称,YOGA 16s 2022 笔记本将搭载 16 英寸屏幕,并且是一
  • 苹果140W USB-C充电器:采用氮化镓技术

    据10 月 30 日 9to5 Mac 消息报道,当苹果推出新的 MacBook Pro 2021 时,该公司还推出了新的 140W USB-C 充电器,附赠在 MacBook Pro 16 英寸机型的盒子里,也支
Top