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

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

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

延迟队列

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

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

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

优先级队列

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

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

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

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

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

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

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

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

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

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

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

发送消息接口:JhX28资讯网——每日最新资讯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条消息:JhX28资讯网——每日最新资讯28at.com

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

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

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

消息消费端:JhX28资讯网——每日最新资讯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() ;    }  }}

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

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

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

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

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

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

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

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

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


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

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

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

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

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

标签:
  • 热门焦点
  • 跑分安卓第一!Redmi K60至尊版8月发布!卢伟冰:目标年度性能之王

    跑分安卓第一!Redmi K60至尊版8月发布!卢伟冰:目标年度性能之王

    8月5日消息,Redmi K60至尊版将于8月发布,在此前举行的战略发布会上,官方该机将搭载搭载天玑9200+处理器,安兔兔V10跑分超177万分,是目前安卓阵营最高的分数
  • 印度登月最关键一步!月船三号今晚进入环月轨道

    印度登月最关键一步!月船三号今晚进入环月轨道

    8月5日消息,据印度官方消息,月船三号将于北京时间今晚21时30分左右开始近月制动进入环月轨道。这是该探测器能够成功的最关键步骤之一,如果成功将开始围
  • CSS单标签实现转转logo

    CSS单标签实现转转logo

    转转品牌升级后更新了全新的Logo,今天我们用纯CSS来实现转转的新Logo,为了有一定的挑战性,这里我们只使用一个标签实现,将最大化的使用CSS能力完成Logo的绘制与动画效果。新logo
  • Automa-通过连接块来自动化你的浏览器

    Automa-通过连接块来自动化你的浏览器

    1、前言通过浏览器插件可实现自动化脚本的录制与编写,具有代表性的工具就是:Selenium IDE、Katalon Recorder,对于简单的业务来说可快速实现自动化的上手工作。Selenium IDEKat
  • K8S | Service服务发现

    K8S | Service服务发现

    一、背景在微服务架构中,这里以开发环境「Dev」为基础来描述,在K8S集群中通常会开放:路由网关、注册中心、配置中心等相关服务,可以被集群外部访问;图片对于测试「Tes」环境或者
  • JVM优化:实战OutOfMemoryError异常

    JVM优化:实战OutOfMemoryError异常

    一、Java堆溢出堆内存中主要存放对象、数组等,只要不断地创建这些对象,并且保证 GC Roots 到对象之间有可达路径来避免垃 圾收集回收机制清除这些对象,当这些对象所占空间超过
  • “又被陈思诚骗了”

    “又被陈思诚骗了”

    作者|张思齐 出品|众面(ID:ZhongMian_ZM)如今的国产悬疑电影,成了陈思诚的天下。最近大爆电影《消失的她》票房突破30亿断层夺魁暑期档,陈思诚再度风头无两。你可以说陈思诚的
  • iQOO 11S或7月上市:搭载“鸡血版”骁龙8Gen2 史上最强5G Soc

    iQOO 11S或7月上市:搭载“鸡血版”骁龙8Gen2 史上最强5G Soc

    去年底,iQOO推出了“电竞旗舰”iQOO 11系列,作为一款性能强机,iQOO 11不仅全球首发2K 144Hz E6全感屏,搭载了第二代骁龙8平台及144Hz电竞屏,同时在快充
  • OPPO K11搭载高性能石墨散热系统:旗舰同款 性能凉爽释放

    OPPO K11搭载高性能石墨散热系统:旗舰同款 性能凉爽释放

    日前OPPO官方宣布,将于7月25日14:30举办新品发布会,届时全新的OPPO K11将正式与大家见面,将主打旗舰影像,和同档位竞品相比,其最大的卖点就是将配备索尼
Top