当前位置: 首页 > news >正文

RabbitMQ(高级特性)优先级队列

假设在电商系统中有一个订单催付的场景,即客户在一段时间内未付款会给用户推送一条短信提醒,但是系统中分为大型商家和小型商家。比如像苹果,小米这样大商家一年能给我们创造很大的利润,所以在订单量大时,他们的订单必须得到优先处理,此时就需要为不同的消息设置不同的优先级,此时我们要使用优先级队列。

创建队列和交换机

@Configuration
public class RabbitConfig3 {private final String EXCHANGE_NAME="priority_exchange";private final String QUEUE_NAME="priority_queue";// 1.创建交换机@Bean(EXCHANGE_NAME)public Exchange priorityExchange(){return ExchangeBuilder.topicExchange(EXCHANGE_NAME).durable(true).build();}// 2.创建队列@Bean(QUEUE_NAME)public Queue priorityQueue(){return QueueBuilder.durable(QUEUE_NAME)//设置队列的最大优先级,最大可以设置到255,官网推荐不要超过10,,如果设置太高比较浪费资源.maxPriority(10).build();}// 3.将队列绑定到交换机@Beanpublic Binding bindPriority(@Qualifier(EXCHANGE_NAME) Exchange exchange, @Qualifier(QUEUE_NAME) Queue queue){return BindingBuilder.bind(queue).to(exchange).with("my_routing").noargs();}
}

编写生产者

@Test
public void testPriority() {for (int i = 0; i < 10; i++) {if (i == 5) {// i为5时消息的优先级较高MessageProperties messageProperties = new MessageProperties();messageProperties.setPriority(9);Message message = new Message(("send message..." + i).getBytes(StandardCharsets.UTF_8), messageProperties);rabbitTemplate.convertAndSend("priority_exchange", "my_routing", message);} else {rabbitTemplate.convertAndSend("priority_exchange", "my_routing", "send message..." + i);}}
}

编写消费者

@Component
public class PriorityConsumer {@RabbitListener(queues = "priority_queue")public void listenMessage(Message message, Channel channel) throws Exception {//获取消息System.out.println(new String(message.getBody()));//手动签收channel.basicAck(message.getMessageProperties().getDeliveryTag(),true);}
}

优先级越高,越先被消费

http://www.lryc.cn/news/220827.html

相关文章:

  • 盘点苹果手机导出照片到电脑的3个方法!
  • px、rpx、em以及rem的区别与用法
  • 类(class)
  • FPGA时序分析与约束(10)——生成时钟
  • A. Hit the Lottery
  • mvn: Downloading from pluginRepository
  • docker相关知识
  • Springboot 集成 RocketMQ(进阶-消息)
  • 10 索引优化与查询优化
  • linux PVE安装
  • ZZ038 物联网应用与服务赛题第J套
  • 【寒武纪(3)】媒体处理系统的系统控制、视频输入和后处理子系统
  • Linux下使用vscode编写Python项目
  • 使用 curator 连接 zookeeper 集群 Invalid config event received
  • 大促期间也要做好低价治理
  • 【c++】——类和对象(中)——默认成员函数(上)
  • 钉钉企业微应用开发C#-HTTP回调接口
  • Rust编程基础之条件表达式和循环
  • MATLAB算法实战应用案例精讲-【人工智能】ROS机器人(补充篇)
  • 基于8086汽车智能小车控制系统
  • 全光谱大面积氙光灯太阳光模拟器老化测试
  • linux添加一条到中间路由器的路由
  • 不同MySQL服务的表以及库的数据迁移(/备份)
  • 聊聊芯片超净间的颗粒(particle)
  • 服务器(windows Server 2019为例)中的日志中文乱码的解决办法
  • Linux 学习(CentOS 7)
  • 架构决策记录 ADR
  • SSM之spring注解式缓存redis->redis整合,redis的注解式开发及应用场景,redis的击穿穿透雪崩
  • 数据库性能优化(查询优化、索引优化、负载均衡、硬件升级等方面)
  • 谁说 Linux 不能玩游戏?