热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Rabbitmqpriority优先级

Rabbitmqpriority优先级顾名思义,具有更高优先级的队列具有较高的优先权,优先级高的消息具备优先被消费的特权。RabbitMQhasprio

Rabbitmq priority 优先级

顾名思义,具有更高优先级的队列具有较高的优先权,优先级高的消息具备优先被消费的特权。
RabbitMQ has priority queue implementation in the core as of version 3.5.0.

在系统应用中会根据业务的优先级来决定哪些内容优先被解决,那么在RabbitMQ 3.5+版本中支持了队列优先级和消息优先级,那么这里就尝试下该功能。

在rabbitmq webUI界面中,add queue是通过添加Arguments或者是在代码中添加效果是一样的,取值范围在0~255之间:

The message priority field is defined as an unsigned byte, so in practice priorities should be between 0 and 255.

这里写图片描述

具体代码如下:
生产者:

public class NewTask {private final static String hostname &#61; "192.168.1.137";//队列名称private final static String QUEUE_NAME &#61; "workqueue";public static void main(String[] args) throws IOException, TimeoutException {//创建连接和频道ConnectionFactory factory &#61; new ConnectionFactory();factory.setHost(hostname);Connection connection &#61; factory.newConnection();Channel channel &#61; connection.createChannel();try {Map param &#61; new HashMap();param.put("x-max-priority", 10);channel.queueDeclare(QUEUE_NAME, false, false, true, param);//send message with priorityfor(int i&#61;0;i<10;i&#43;&#43;) {AMQP.BasicProperties.Builder builder &#61; new AMQP.BasicProperties.Builder();if(i&#61;&#61;9 || i&#61;&#61;3 || i&#61;&#61;5)builder.priority(5);AMQP.BasicProperties properties &#61; builder.build();channel.basicPublish("",QUEUE_NAME,properties,("messages-"&#43;i).getBytes());}}catch (Exception e){e.printStackTrace();}finally {channel.close();connection.close();}}
}

消费者&#xff1a;

public class Worker1 {private final static String hostname &#61; "192.168.1.137";//队列名称private final static String QUEUE_NAME &#61; "workqueue";public static void main(String[] argv) throws java.io.IOException,java.lang.InterruptedException, TimeoutException {ConnectionFactory factory &#61; new ConnectionFactory();factory.setHost(hostname);Connection connection &#61; factory.newConnection();Channel channel &#61; connection.createChannel();QueueingConsumer consumer &#61; new QueueingConsumer(channel);channel.basicConsume(QUEUE_NAME, false, consumer);while (true) {QueueingConsumer.Delivery delivery &#61; consumer.nextDelivery();String msg &#61; new String(delivery.getBody());System.out.println(msg);channel.basicAck(delivery.getEnvelope().getDeliveryTag(),false);}}}

代码中判断i&#61;&#61;3,i&#61;&#61;5,i&#61;&#61;9这三个消息的权重相等5且高于其他消息&#xff0c;理应提前被处理&#xff0c;代码运行结果为&#xff1a;
测试结果&#xff1a;
这里写图片描述

查看运行结果可以验证优先级队列的作用。

当然&#xff0c;在消费端速度大于生产端速度&#xff0c;且broker中没有消息堆积的话&#xff0c;对发送的消息设置优先级也没什么实际意义&#xff0c;因为发送端刚发送完一条消息就被消费端消费了&#xff0c;那么就相当于broker至多只有一条消息&#xff0c;那么对于单条消息来说优先级是没有什么意义的。

参考链接

1、https://www.rabbitmq.com/priority.html

2、http://zkread.com/article/1246857.html



推荐阅读
  • 深入解析JWT的实现与应用
    本文深入探讨了JSON Web Token (JWT) 的实现机制及其应用场景。JWT 是一种基于 RFC 7519 标准的开放性认证协议,用于在各方之间安全地传输信息。文章详细分析了 JWT 的结构、生成和验证过程,并讨论了其在现代 Web 应用中的实际应用案例,为开发者提供了全面的理解和实践指导。 ... [详细]
  • 本文深入探讨了 MXOTDLL.dll 在 C# 环境中的应用与优化策略。针对近期公司从某生物技术供应商采购的指纹识别设备,该设备提供的 DLL 文件是用 C 语言编写的。为了更好地集成到现有的 C# 系统中,我们对原生的 C 语言 DLL 进行了封装,并利用 C# 的互操作性功能实现了高效调用。此外,文章还详细分析了在实际应用中可能遇到的性能瓶颈,并提出了一系列优化措施,以确保系统的稳定性和高效运行。 ... [详细]
  • 本文提供了 RabbitMQ 3.7 的快速上手指南,详细介绍了环境搭建、生产者和消费者的配置与使用。通过官方教程的指引,读者可以轻松完成初步测试和实践,快速掌握 RabbitMQ 的核心功能和基本操作。 ... [详细]
  • 本文探讨了在PowerShell中高效管理和操作大规模内存对象的技术与实践。详细介绍了如何启用PowerShell的大内存支持功能,并提供了优化性能和减少资源消耗的具体方法。此外,还讨论了常见问题及其解决方案,旨在帮助用户在处理复杂数据集时提高效率和稳定性。 ... [详细]
  • 本文详细探讨了Java集合框架的使用方法及其性能特点。首先,通过关系图展示了集合接口之间的层次结构,如`Collection`接口作为对象集合的基础,其下分为`List`、`Set`和`Queue`等子接口。其中,`List`接口支持按插入顺序保存元素且允许重复,而`Set`接口则确保元素唯一性。此外,文章还深入分析了不同集合类在实际应用中的性能表现,为开发者选择合适的集合类型提供了参考依据。 ... [详细]
  • 开发心得:深入探讨Servlet、Dubbo与MyBatis中的责任链模式应用
    开发心得:深入探讨Servlet、Dubbo与MyBatis中的责任链模式应用 ... [详细]
  • 本项目在Java Maven框架下,利用POI库实现了Excel数据的高效导入与导出功能。通过优化数据处理流程,提升了数据操作的性能和稳定性。项目已发布至GitHub,当前最新版本为0.0.5。该项目不仅适用于小型应用,也可扩展用于大型企业级系统,提供了灵活的数据管理解决方案。GitHub地址:https://github.com/83945105/holygrail,Maven坐标:`com.github.83945105:holygrail:0.0.5`。 ... [详细]
  • 如何在Java中高效构建WebService
    本文介绍了如何利用XFire框架在Java中高效构建WebService。XFire是一个轻量级、高性能的Java SOAP框架,能够简化WebService的开发流程。通过结合MyEclipse集成开发环境,开发者可以更便捷地进行项目配置和代码编写,从而提高开发效率。此外,文章还详细探讨了XFire的关键特性和最佳实践,为读者提供了实用的参考。 ... [详细]
  • Go语言实现Redis客户端与服务器的交互机制深入解析
    在前文对Godis v1.0版本的基础功能进行了详细介绍后,本文将重点探讨如何实现客户端与服务器之间的交互机制。通过具体代码实现,使客户端与服务器能够顺利通信,赋予项目实际运行的能力。本文将详细解析Go语言在实现这一过程中的关键技术和实现细节,帮助读者深入了解Redis客户端与服务器的交互原理。 ... [详细]
  • 深入解析Java中HashCode的功能与应用
    本文深入探讨了Java中HashCode的功能与应用。在Java中,HashCode主要用于提高哈希表(如HashMap、HashSet)的性能,通过快速定位对象存储位置,减少碰撞概率。文章详细解析了HashCode的生成机制及其在集合框架中的作用,帮助开发者更好地理解和优化代码。此外,还介绍了如何自定义HashCode方法以满足特定需求,并讨论了常见的实现误区和最佳实践。 ... [详细]
  • Jedis接口分类详解与应用指南
    本文详细解析了Jedis接口的分类及其应用指南,重点介绍了字符串数据类型(String)的接口功能。作为Redis中最基本的数据存储形式,字符串类型支持多种操作,如设置、获取和更新键值对等,适用于广泛的应用场景。 ... [详细]
  • MongoDB Aggregates.group() 方法详解与编程实例 ... [详细]
  • 深入解析 iOS Objective-C 中的对象内存对齐规则及其优化策略
    深入解析 iOS Objective-C 中的对象内存对齐规则及其优化策略 ... [详细]
  • 在探讨 AS3 中的数据深度复制技术时,本文详细介绍了实现数据深度克隆的有效方法。通过对比多种方案,最终确定了一种高效且可靠的实现方式,所有代码均来源于公开资源,确保了方法的实用性和可操作性。 ... [详细]
  • Qt 34:深入探讨缓冲区管理、目录操作及文件系统监控技术——QBuffer、QDir与QFileSystemWatcher的应用分析
    本文深入探讨了Qt框架中QBuffer、QDir和QFileSystemWatcher三个核心类的应用。QBuffer作为缓冲区管理工具,提供了高效的数据读写功能;QDir则专注于目录操作,支持路径遍历和文件检索等任务;而QFileSystemWatcher则用于实时监控文件系统的变化,便于应用程序及时响应文件或目录的增删改操作。通过实例分析,详细解析了这三个类在实际开发中的应用场景和实现细节。 ... [详细]
author-avatar
Andou1983
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有